goto end;
}
- /* Open for writing */
+ /*
+ * Open a new write only file handle to populate the `metadata_buf`
+ * memory buffer so we can write in loop in it easily.
+ */
fp = bt_open_memstream(&metadata_buf, &size);
if (!fp) {
- BT_COMP_LOGE_APPEND_CAUSE_ERRNO(self_comp,
- "Metadata open_memstream", ".");
- goto error;
+ if (errno == EINTR &&
+ lttng_live_graph_is_canceled(session->lttng_live_msg_iter)) {
+ session->lttng_live_msg_iter->was_interrupted = true;
+ status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
+ } else {
+ BT_COMP_LOGE_APPEND_CAUSE_ERRNO(self_comp,
+ "Metadata open_memstream", ".");
+ status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
+ }
+ goto end;
}
keep_receiving = true;
goto end;
}
+ /* The memory buffer `metadata_buf` contains all the metadata. */
if (bt_close_memstream(&metadata_buf, &size, fp)) {
BT_COMP_LOGE_APPEND_CAUSE_ERRNO(self_comp,
"Metadata bt_close_memstream", ".");
goto end;
}
+ /*
+ * Open a new reading file handle on the `metadata_buf` and pass it to
+ * the metadata decoder.
+ */
fp = bt_fmemopen(metadata_buf, len_read, "rb");
if (!fp) {
- BT_COMP_LOGE_APPEND_CAUSE_ERRNO(self_comp,
- "Cannot memory-open metadata buffer", ".");
- goto error;
+ if (errno == EINTR &&
+ lttng_live_graph_is_canceled(session->lttng_live_msg_iter)) {
+ session->lttng_live_msg_iter->was_interrupted = true;
+ status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
+ } else {
+ BT_COMP_LOGE_APPEND_CAUSE_ERRNO(self_comp,
+ "Cannot memory-open metadata buffer", ".");
+ status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
+ }
+ goto end;
}
/*
goto end;
error:
- if (errno == EINTR) {
- if (lttng_live_graph_is_canceled(session->lttng_live_msg_iter)) {
- status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
- }
- } else {
- status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
- }
+ status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
end:
if (fp) {
int closeret;