From: Mathieu Desnoyers Date: Wed, 30 Nov 2011 22:28:59 +0000 (-0500) Subject: ust-ctl API: ustctl_release_object() should return an error instead of assert X-Git-Tag: v1.9.1~45 X-Git-Url: https://git.lttng.org/?a=commitdiff_plain;h=d26228ae208d9a5e9484c17a36c4efaf373bf474;p=lttng-ust.git ust-ctl API: ustctl_release_object() should return an error instead of assert Communication error can cause this function to fail, so an assert is definitely not the right approach. Return error to caller. Signed-off-by: Mathieu Desnoyers --- diff --git a/include/lttng/ust-ctl.h b/include/lttng/ust-ctl.h index 2bb03f65..af76f267 100644 --- a/include/lttng/ust-ctl.h +++ b/include/lttng/ust-ctl.h @@ -130,6 +130,6 @@ void ustctl_flush_buffer(struct lttng_ust_shm_handle *handle, int producer_active); /* Release object created by members of this API */ -void ustctl_release_object(int sock, struct lttng_ust_object_data *data); +int ustctl_release_object(int sock, struct lttng_ust_object_data *data); #endif /* _LTTNG_UST_CTL_H */ diff --git a/liblttng-ust-ctl/ustctl.c b/liblttng-ust-ctl/ustctl.c index 7cd01771..30e408bc 100644 --- a/liblttng-ust-ctl/ustctl.c +++ b/liblttng-ust-ctl/ustctl.c @@ -44,23 +44,34 @@ void init_object(struct lttng_ust_object_data *data) * If sock is negative, it means we don't have to notify the other side * (e.g. application has already vanished). */ -void ustctl_release_object(int sock, struct lttng_ust_object_data *data) +int ustctl_release_object(int sock, struct lttng_ust_object_data *data) { struct ustcomm_ust_msg lum; struct ustcomm_ust_reply lur; int ret; - if (data->shm_fd >= 0) - close(data->shm_fd); - if (data->wait_fd >= 0) - close(data->wait_fd); + if (data->shm_fd >= 0) { + ret = close(data->shm_fd); + if (ret < 0) { + return ret; + } + } + if (data->wait_fd >= 0) { + ret = close(data->wait_fd); + if (ret < 0) { + return ret; + } + } if (sock >= 0) { memset(&lum, 0, sizeof(lum)); lum.handle = data->handle; lum.cmd = LTTNG_UST_RELEASE; ret = ustcomm_send_app_cmd(sock, &lum, &lur); - assert(!ret); + if (ret < 0) { + return ret; + } } + return 0; } /* @@ -160,7 +171,7 @@ int ustctl_open_metadata(int sock, int session_handle, return 0; error: - ustctl_release_object(sock, metadata_data); + (void) ustctl_release_object(sock, metadata_data); free(metadata_data); return -EINVAL; } @@ -214,7 +225,7 @@ int ustctl_create_channel(int sock, int session_handle, return 0; error: - ustctl_release_object(sock, channel_data); + (void) ustctl_release_object(sock, channel_data); free(channel_data); return -EINVAL; } @@ -266,7 +277,7 @@ int ustctl_create_stream(int sock, struct lttng_ust_object_data *channel_data, return ret; error: - ustctl_release_object(sock, stream_data); + (void) ustctl_release_object(sock, stream_data); free(stream_data); return -EINVAL; }