From e3f6429effd6d63d106d72eb757c78a4cdab2e4a Mon Sep 17 00:00:00 2001 From: normal Date: Thu, 16 Aug 2018 09:16:11 +0000 Subject: [PATCH] thread.c (consume_communication_pipe): disarm UBF_TIMER before consume Same reasoning as the disarm in rb_sigwait_fd_get, the current thread is already processing signals, so we do not need UBF_TIMER to continually kick the process, anymore. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64390 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- thread.c | 8 ++++++++ thread_win32.c | 1 + 2 files changed, 9 insertions(+) diff --git a/thread.c b/thread.c index 90cb1c226e..23a4ebf192 100644 --- a/thread.c +++ b/thread.c @@ -4269,6 +4269,14 @@ consume_communication_pipe(int fd) ssize_t result; int ret = FALSE; /* for rb_sigwait_sleep */ + /* + * disarm UBF_TIMER before we read, because it can become + * re-armed at any time via sighandler and the pipe will refill + * We can disarm it because this thread is now processing signals + * and we do not want unnecessary SIGVTALRM + */ + ubf_timer_disarm(); + while (1) { result = read(fd, buff, sizeof(buff)); if (result > 0) { diff --git a/thread_win32.c b/thread_win32.c index 6db1f25fa7..6e9f18f458 100644 --- a/thread_win32.c +++ b/thread_win32.c @@ -22,6 +22,7 @@ #define unregister_ubf_list(th) #define ubf_wakeup_all_threads() do {} while (0) #define ubf_threads_empty() (1) +#define ubf_timer_disarm() do {} while (0) static volatile DWORD ruby_native_thread_key = TLS_OUT_OF_INDEXES;