X-Git-Url: http://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fmain.c;fp=src%2Fbin%2Flttng-sessiond%2Fmain.c;h=7225495547b2276d0df20dfaac64f415fb434b54;hp=d735be833f4064e88d0cd801a45c6d781d618c55;hb=268ec049968538c7a3176159fc992b07ebe69af1;hpb=3b1ddb0b6e3ca2273ef45fbd1b4ad24a0ed14685 diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index d735be833..722549554 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -1287,16 +1287,27 @@ static void *thread_manage_apps(void *data) * At this point, we know that a registered application made * the event at poll_wait. */ - if (revents & (LPOLLERR | LPOLLHUP | LPOLLRDHUP)) { - /* Removing from the poll set */ - ret = lttng_poll_del(&events, pollfd); - if (ret < 0) { - goto error; - } - /* Socket closed on remote end. */ - ust_app_unregister(pollfd); - break; + if (revents & (LPOLLIN | LPOLLERR | LPOLLHUP | LPOLLRDHUP)) { + ssize_t readlen; + char dummy; + + do { + readlen = read(pollfd, &dummy, 1); + } while (readlen == -1 && errno == EINTR); + + if (readlen == 0) { + /* Removing from the poll set */ + ret = lttng_poll_del(&events, pollfd); + if (ret < 0) { + goto error; + } + + /* Socket closed on remote end. */ + ust_app_unregister(pollfd); + break; + + } } } }