projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: channel lock must be taken to check for pending notifications
[lttng-tools.git]
/
src
/
lib
/
lttng-ctl
/
channel.c
diff --git
a/src/lib/lttng-ctl/channel.c
b/src/lib/lttng-ctl/channel.c
index 75a911f2af3ec7080085c648792d23393f82ad1c..f2daf0d50e360f050e3146431b1fede07833ddf3 100644
(file)
--- a/
src/lib/lttng-ctl/channel.c
+++ b/
src/lib/lttng-ctl/channel.c
@@
-81,7
+81,9
@@
int receive_message(struct lttng_notification_channel *channel)
end:
return ret;
error:
end:
return ret;
error:
- lttng_dynamic_buffer_set_size(&channel->reception_buffer, 0);
+ if (lttng_dynamic_buffer_set_size(&channel->reception_buffer, 0)) {
+ ret = -1;
+ }
goto end;
}
goto end;
}
@@
-213,6
+215,8
@@
lttng_notification_channel_get_next_notification(
goto end;
}
goto end;
}
+ pthread_mutex_lock(&channel->lock);
+
if (channel->pending_notifications.count) {
struct pending_notification *pending_notification;
if (channel->pending_notifications.count) {
struct pending_notification *pending_notification;
@@
-230,11
+234,9
@@
lttng_notification_channel_get_next_notification(
cds_list_del(&pending_notification->node);
channel->pending_notifications.count--;
free(pending_notification);
cds_list_del(&pending_notification->node);
channel->pending_notifications.count--;
free(pending_notification);
- goto end;
+ goto end
_unlock
;
}
}
- pthread_mutex_lock(&channel->lock);
-
ret = receive_message(channel);
if (ret) {
status = LTTNG_NOTIFICATION_CHANNEL_STATUS_ERROR;
ret = receive_message(channel);
if (ret) {
status = LTTNG_NOTIFICATION_CHANNEL_STATUS_ERROR;
@@
-442,7
+444,7
@@
int handshake(struct lttng_notification_channel *channel)
pthread_mutex_lock(&channel->lock);
pthread_mutex_lock(&channel->lock);
- ret = lttcomm_send_unix_sock(channel->socket, send_buffer,
+ ret = lttcomm_send_
creds_
unix_sock(channel->socket, send_buffer,
sizeof(send_buffer));
if (ret < 0) {
goto end_unlock;
sizeof(send_buffer));
if (ret < 0) {
goto end_unlock;
This page took
0.035994 seconds
and
5
git commands to generate.