Ensures proper protocol behavior, because the sender expects the
receiver to get the two file descriptors.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
struct lttng_ust_object_data *metadata_data;
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
struct lttng_ust_object_data *metadata_data;
metadata_data = malloc(sizeof(*metadata_data));
if (!metadata_data)
metadata_data = malloc(sizeof(*metadata_data));
if (!metadata_data)
/* get shm fd */
ret = ustcomm_recv_fd(sock);
if (ret < 0)
/* get shm fd */
ret = ustcomm_recv_fd(sock);
if (ret < 0)
- goto error;
- metadata_data->shm_fd = ret;
+ err = 1;
+ else
+ metadata_data->shm_fd = ret;
+ /*
+ * We need to get the second FD even if the first fails, because
+ * libust expects us to read the two FDs.
+ */
/* get wait fd */
ret = ustcomm_recv_fd(sock);
if (ret < 0)
/* get wait fd */
ret = ustcomm_recv_fd(sock);
if (ret < 0)
+ err = 1;
+ else
+ metadata_data->wait_fd = ret;
+ if (err)
- metadata_data->wait_fd = ret;
*_metadata_data = metadata_data;
return 0;
*_metadata_data = metadata_data;
return 0;
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
struct lttng_ust_object_data *channel_data;
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
struct lttng_ust_object_data *channel_data;
channel_data = malloc(sizeof(*channel_data));
if (!channel_data)
channel_data = malloc(sizeof(*channel_data));
if (!channel_data)
/* get shm fd */
ret = ustcomm_recv_fd(sock);
if (ret < 0)
/* get shm fd */
ret = ustcomm_recv_fd(sock);
if (ret < 0)
- goto error;
- channel_data->shm_fd = ret;
+ err = 1;
+ else
+ channel_data->shm_fd = ret;
+ /*
+ * We need to get the second FD even if the first fails, because
+ * libust expects us to read the two FDs.
+ */
/* get wait fd */
ret = ustcomm_recv_fd(sock);
if (ret < 0)
/* get wait fd */
ret = ustcomm_recv_fd(sock);
if (ret < 0)
+ err = 1;
+ else
+ channel_data->wait_fd = ret;
+ if (err)
- channel_data->wait_fd = ret;
*_channel_data = channel_data;
return 0;
*_channel_data = channel_data;
return 0;
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
struct lttng_ust_object_data *stream_data;
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
struct lttng_ust_object_data *stream_data;
stream_data = malloc(sizeof(*stream_data));
if (!stream_data)
stream_data = malloc(sizeof(*stream_data));
if (!stream_data)
/* get shm fd */
fd = ustcomm_recv_fd(sock);
if (fd < 0)
/* get shm fd */
fd = ustcomm_recv_fd(sock);
if (fd < 0)
- goto error;
- stream_data->shm_fd = fd;
+ err = 1;
+ else
+ stream_data->shm_fd = fd;
+ /*
+ * We need to get the second FD even if the first fails, because
+ * libust expects us to read the two FDs.
+ */
/* get wait fd */
fd = ustcomm_recv_fd(sock);
if (fd < 0)
/* get wait fd */
fd = ustcomm_recv_fd(sock);
if (fd < 0)
+ err = 1;
+ else
+ stream_data->wait_fd = fd;
+ if (err)
- stream_data->wait_fd = fd;
*_stream_data = stream_data;
return ret;
*_stream_data = stream_data;
return ret;