aboutsummaryrefslogtreecommitdiffstats
path: root/thread_pthread.c
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-12-08 22:04:43 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-12-08 22:04:43 +0000
commitab73ef6b7037039a05edcbf2a0c1b1108197e036 (patch)
treeba6b81bf3a8e7393941fd14b5ea7864653c722fd /thread_pthread.c
parent043047a8fd5315d98eac38ddbd04ebe8db361817 (diff)
downloadruby-ab73ef6b7037039a05edcbf2a0c1b1108197e036.tar.gz
Revert "thread_pthread.c: fix memory leak from fork loop leapfrog (v2)"
This reverts r66290 / commit 043047a8fd5315d98eac38ddbd04ebe8db361817. Still fails on CI, and I'm not able to reproduce the failure, either :< http://ci.rvm.jp/results/trunk-test@ruby-sky1/1508228 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66291 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'thread_pthread.c')
-rw-r--r--thread_pthread.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/thread_pthread.c b/thread_pthread.c
index f641941017..c87e952750 100644
--- a/thread_pthread.c
+++ b/thread_pthread.c
@@ -1726,12 +1726,16 @@ rb_thread_create_timer_thread(void)
if (setup_communication_pipe_internal(signal_self_pipe.normal) < 0) return;
if (setup_communication_pipe_internal(signal_self_pipe.ub_main) < 0) return;
- ubf_timer_create(current);
if (owner != current) {
/* validate pipe on this process */
+ ubf_timer_create(current);
sigwait_th = THREAD_INVALID;
signal_self_pipe.owner_process = current;
}
+ else if (UBF_TIMER == UBF_TIMER_PTHREAD) {
+ /* UBF_TIMER_PTHREAD needs to recreate after fork */
+ ubf_timer_pthread_create(current);
+ }
}
static void
@@ -1759,14 +1763,7 @@ ubf_timer_disarm(void)
static void
ubf_timer_destroy(void)
{
-#if UBF_TIMER == UBF_TIMER_POSIX
- if (timer_posix.owner == getpid()) {
- ubf_timer_disarm();
- if (timer_delete(timer_posix.timerid) < 0)
- rb_sys_fail("timer_delete");
- memset(&timer_posix, 0, sizeof(timer_posix));
- }
-#elif UBF_TIMER == UBF_TIMER_PTHREAD
+#if UBF_TIMER == UBF_TIMER_PTHREAD
int err;
timer_pthread.owner = 0;
@@ -1777,6 +1774,7 @@ ubf_timer_destroy(void)
rb_raise(rb_eThreadError, "native_thread_join() failed (%d)", err);
}
#endif
+/* no need to destroy real POSIX timers */
}
static int