* SOFTWARE.
*/
+#define BT_LOG_TAG "PLUGIN-CTF-LTTNG-LIVE-SRC-METADATA"
+#include "logging.h"
+
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <glib.h>
#include <babeltrace/compat/uuid-internal.h>
#include <babeltrace/compat/memstream-internal.h>
-
-#define PRINT_ERR_STREAM lttng_live->error_fp
-#define PRINT_PREFIX "lttng-live-metadata"
-#define PRINT_DBG_CHECK lttng_live_debug
-#include "../print.h"
+#include <babeltrace/graph/graph.h>
#include "metadata.h"
#include "../common/metadata/decoder.h"
struct lttng_live_trace *trace)
{
struct lttng_live_session *session = trace->session;
- struct lttng_live_component *lttng_live = session->lttng_live;
struct lttng_live_metadata *metadata = trace->metadata;
ssize_t ret = 0;
size_t size, len_read = 0;
goto end;
}
+ if (!metadata->trace) {
+ trace->new_metadata_needed = false;
+ }
+
if (!trace->new_metadata_needed) {
goto end;
}
/* Open for writing */
fp = bt_open_memstream(&metadata_buf, &size);
if (!fp) {
- PERR("Metadata open_memstream: %s\n", strerror(errno));
+ BT_LOGE("Metadata open_memstream: %s", strerror(errno));
goto error;
}
* the data streams are done.
*/
lttng_live_unref_trace(metadata->trace);
+ metadata->trace = NULL;
+ }
+ if (errno == EINTR) {
+ if (lttng_live_is_canceled(session->lttng_live)) {
+ status = BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
+ goto end;
+ }
}
}
goto end;
}
- if (babeltrace_debug) {
- // yydebug = 1;
- }
-
fp = bt_fmemopen(metadata_buf, len_read, "rb");
if (!fp) {
- PERR("Cannot memory-open metadata buffer: %s\n",
+ BT_LOGE("Cannot memory-open metadata buffer: %s",
strerror(errno));
goto error;
}
closeret = fclose(fp);
if (closeret) {
- PERR("Error on fclose");
+ BT_LOGE("Error on fclose");
}
}
+ free(metadata_buf);
return status;
}
BT_HIDDEN
int lttng_live_metadata_create_stream(struct lttng_live_session *session,
uint64_t ctf_trace_id,
- uint64_t stream_id)
+ uint64_t stream_id,
+ const char *trace_name)
{
struct lttng_live_metadata *metadata = NULL;
struct lttng_live_trace *trace;
+ const char *match;
metadata = g_new0(struct lttng_live_metadata, 1);
if (!metadata) {
}
metadata->stream_id = stream_id;
//TODO: add clock offset option
- metadata->decoder = ctf_metadata_decoder_create(
- session->lttng_live->error_fp, 0);
+ match = strstr(trace_name, session->session_name->str);
+ if (!match) {
+ goto error;
+ }
+ metadata->decoder = ctf_metadata_decoder_create(0,
+ match);
if (!metadata->decoder) {
goto error;
}
}
ctf_metadata_decoder_destroy(metadata->decoder);
trace->metadata = NULL;
- lttng_live_unref_trace(trace);
if (!metadata->closed) {
lttng_live_unref_trace(metadata->trace);
}