Issue
=====
We check the errno value even in cases where the errno is not set by the
function that witnessed the error.
For example, we have a `goto error;` after the
`lttng_live_get_one_metadata_packet() call.
Solution
========
Move the errno check right after the functions that set it on error.
Note
====
This erroneous change was introduced by this commit:
commit
c28512ab93b16501a8b0da494f0a03e5f0f22662
Author: Francis Deslauriers <francis.deslauriers@efficios.com>
Date: Mon Oct 28 14:49:08 2019 -0400
src.ctf.lttng-live: make `lttng_live_get_one_metadata_packet()` return status
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I7acb86984249658460888079fd7968d35f6d43fa
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2342
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
/* Open for writing */
fp = bt_open_memstream(&metadata_buf, &size);
if (!fp) {
/* Open for writing */
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)) {
+ 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;
fp = bt_fmemopen(metadata_buf, len_read, "rb");
if (!fp) {
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)) {
+ 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;
- 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;
end:
if (fp) {
int closeret;