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./?a=commitdiff_plain;h=5f003977aaebf8bed9cc3627d3e1b5ff9e6893e6;p=lttng-ust.git 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