X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=liblttng-ust%2Flttng-ust-comm.c;h=0cd0d178c624fdef3f058583295226d93cdc18df;hb=bb84a1ec7fbaeb6b22848505e76fc90678fde511;hp=af8636a812eb438c34c48deb1e4349ca9dd17fc1;hpb=ba5b3d2bf3ecd8614e74efc1db2f5a626c5d9a92;p=deliverable%2Flttng-ust.git diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c index af8636a8..0cd0d178 100644 --- a/liblttng-ust/lttng-ust-comm.c +++ b/liblttng-ust/lttng-ust-comm.c @@ -345,6 +345,7 @@ static const char *cmd_name_mapping[] = { /* Counter commands */ [ LTTNG_UST_COUNTER_GLOBAL ] = "Create Counter Global", [ LTTNG_UST_COUNTER_CPU ] = "Create Counter CPU", + [ LTTNG_UST_COUNTER_EVENT ] = "Create Counter Event", }; static const char *str_timeout; @@ -1293,7 +1294,48 @@ int handle_message(struct sock_info *sock_info, ret = -ENOSYS; break; } + case LTTNG_UST_COUNTER_EVENT: + { + /* Receive struct lttng_ust_counter_event */ + struct lttng_ust_counter_event counter_event; + if (sizeof(counter_event) != lum->u.counter_event.len) { + DBG("incorrect counter event data message size: %u", lum->u.counter_event.len); + ret = -EINVAL; + goto error; + } + len = ustcomm_recv_unix_sock(sock, &counter_event, sizeof(counter_event)); + switch (len) { + case 0: /* orderly shutdown */ + ret = 0; + goto error; + default: + if (len == sizeof(counter_event)) { + DBG("counter event data received"); + break; + } else if (len < 0) { + DBG("Receive failed from lttng-sessiond with errno %d", (int) -len); + if (len == -ECONNRESET) { + ERR("%s remote end closed connection", sock_info->name); + ret = len; + goto error; + } + ret = len; + goto error; + } else { + DBG("incorrect event notifier data message size: %zd", len); + ret = -EINVAL; + goto error; + } + } + if (ops->cmd) + ret = ops->cmd(lum->handle, lum->cmd, + (unsigned long) &counter_event, + &args, sock_info); + else + ret = -ENOSYS; + break; + } default: if (ops->cmd) ret = ops->cmd(lum->handle, lum->cmd,