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 <mathieu.desnoyers@efficios.com>
int producer_active);
/* Release object created by members of this API */
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 */
#endif /* _LTTNG_UST_CTL_H */
* If sock is negative, it means we don't have to notify the other side
* (e.g. application has already vanished).
*/
* 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;
{
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);
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);
+ if (ret < 0) {
+ return ret;
+ }
- ustctl_release_object(sock, metadata_data);
+ (void) ustctl_release_object(sock, metadata_data);
free(metadata_data);
return -EINVAL;
}
free(metadata_data);
return -EINVAL;
}
- ustctl_release_object(sock, channel_data);
+ (void) ustctl_release_object(sock, channel_data);
free(channel_data);
return -EINVAL;
}
free(channel_data);
return -EINVAL;
}
- ustctl_release_object(sock, stream_data);
+ (void) ustctl_release_object(sock, stream_data);
free(stream_data);
return -EINVAL;
}
free(stream_data);
return -EINVAL;
}