From: Mathieu Desnoyers Date: Mon, 9 Apr 2012 15:02:42 +0000 (-0400) Subject: Fix: ustctl need to send the second fd upon error of 1st fd X-Git-Tag: v2.0.2~8 X-Git-Url: https://git.lttng.org/?p=lttng-ust.git;a=commitdiff_plain;h=5f003977aaebf8bed9cc3627d3e1b5ff9e6893e6 Fix: ustctl need to send the second fd upon error of 1st fd Otherwise cause protocol discrepancy between ust and sessiond upon send error. The sessiond will wait for an fd that never arrives. Signed-off-by: Mathieu Desnoyers --- diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c index e3afe6af..0116b5f7 100644 --- a/liblttng-ust/lttng-ust-comm.c +++ b/liblttng-ust/lttng-ust-comm.c @@ -325,14 +325,20 @@ end: || lum->cmd == LTTNG_UST_CHANNEL || lum->cmd == LTTNG_UST_METADATA) && lur.ret_code == USTCOMM_OK) { + int sendret = 0; + /* we also need to send the file descriptors. */ ret = ustcomm_send_fds_unix_sock(sock, &shm_fd, &shm_fd, 1, sizeof(int)); if (ret < 0) { perror("send shm_fd"); - goto error; + sendret = ret; } + /* + * The sessiond expects 2 file descriptors, even upon + * error. + */ ret = ustcomm_send_fds_unix_sock(sock, &wait_fd, &wait_fd, 1, sizeof(int)); @@ -340,6 +346,10 @@ end: perror("send wait_fd"); goto error; } + if (sendret) { + ret = sendret; + goto error; + } } /* * We still have the memory map reference, and the fds have been