From 793d29c9367a58c2a368bc1ccb11b01c2d2bdac2 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Fri, 11 Oct 2019 10:11:39 -0400 Subject: [PATCH] Revert "Fix: fd tracker: do not allow signal handlers to close lttng-ust FDs" This reverts commit 48a143c09cc97bf7a2ace811277e7d60b294b5f6. Fixes: #1204 Signed-off-by: Mathieu Desnoyers --- include/ust-fd.h | 1 - liblttng-ust-comm/lttng-ust-fd-tracker.c | 26 ++++++------------------ liblttng-ust/lttng-ust-comm.c | 1 - 3 files changed, 6 insertions(+), 22 deletions(-) diff --git a/include/ust-fd.h b/include/ust-fd.h index 327a5f95..a0155251 100644 --- a/include/ust-fd.h +++ b/include/ust-fd.h @@ -31,7 +31,6 @@ int lttng_ust_add_fd_to_tracker(int fd); void lttng_ust_delete_fd_from_tracker(int fd); void lttng_ust_lock_fd_tracker(void); void lttng_ust_unlock_fd_tracker(void); -void lttng_ust_fd_tracker_register_thread(void); int lttng_ust_safe_close_fd(int fd, int (*close_cb)(int)); int lttng_ust_safe_fclose_stream(FILE *stream, int (*fclose_cb)(FILE *stream)); diff --git a/liblttng-ust-comm/lttng-ust-fd-tracker.c b/liblttng-ust-comm/lttng-ust-fd-tracker.c index 42c3984c..9659f349 100644 --- a/liblttng-ust-comm/lttng-ust-fd-tracker.c +++ b/liblttng-ust-comm/lttng-ust-fd-tracker.c @@ -77,20 +77,12 @@ static int ust_safe_guard_saved_cancelstate; /* * Track whether we are within lttng-ust or application, for close - * system call override by LD_PRELOAD library. Threads registered - * as being lttng-ust listener threads need to perform fd tracker - * locking explicitly around their use of file descriptor manipulation - * functions. - */ -static DEFINE_URCU_TLS(int, thread_fd_tracking); - -/* - * Track whether we are invoking close() from a signal handler nested on - * an application thread. + * system call override by LD_PRELOAD library. This also tracks whether + * we are invoking close() from a signal handler nested on an + * application thread. */ static DEFINE_URCU_TLS(int, ust_fd_mutex_nest); - /* fd_set used to book keep fd being used by lttng-ust. */ static fd_set *lttng_fd_set; static int lttng_ust_max_fd; @@ -102,7 +94,6 @@ static int init_done; */ void lttng_ust_fixup_fd_tracker_tls(void) { - asm volatile ("" : : "m" (URCU_TLS(thread_fd_tracking))); asm volatile ("" : : "m" (URCU_TLS(ust_fd_mutex_nest))); } @@ -357,7 +348,7 @@ int lttng_ust_safe_close_fd(int fd, int (*close_cb)(int fd)) * If called from lttng-ust, we directly call close without * validating whether the FD is part of the tracked set. */ - if (URCU_TLS(thread_fd_tracking)) + if (URCU_TLS(ust_fd_mutex_nest)) return close_cb(fd); lttng_ust_lock_fd_tracker(); @@ -393,7 +384,7 @@ int lttng_ust_safe_fclose_stream(FILE *stream, int (*fclose_cb)(FILE *stream)) * If called from lttng-ust, we directly call fclose without * validating whether the FD is part of the tracked set. */ - if (URCU_TLS(thread_fd_tracking)) + if (URCU_TLS(ust_fd_mutex_nest)) return fclose_cb(stream); fd = fileno(stream); @@ -456,7 +447,7 @@ int lttng_ust_safe_closefrom_fd(int lowfd, int (*close_cb)(int fd)) * If called from lttng-ust, we directly call close without * validating whether the FD is part of the tracked set. */ - if (URCU_TLS(thread_fd_tracking)) { + if (URCU_TLS(ust_fd_mutex_nest)) { for (i = lowfd; i < lttng_ust_max_fd; i++) { if (close_cb(i) < 0) { switch (errno) { @@ -501,8 +492,3 @@ int lttng_ust_safe_closefrom_fd(int lowfd, int (*close_cb)(int fd)) end: return ret; } - -void lttng_ust_fd_tracker_register_thread(void) -{ - URCU_TLS(thread_fd_tracking) = 1; -} diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c index 3cebb981..47ba36e5 100644 --- a/liblttng-ust/lttng-ust-comm.c +++ b/liblttng-ust/lttng-ust-comm.c @@ -1457,7 +1457,6 @@ void *ust_listener_thread(void *arg) long timeout; lttng_ust_fixup_tls(); - lttng_ust_fd_tracker_register_thread(); /* * If available, add '-ust' to the end of this thread's * process name -- 2.34.1