Backport #3779
closedThreading issues on Debian GNU/kFreeBSD
Description
=begin
Due to incorrect assumptions on sigprocmask in threaded programs, ruby 1.8 doesn't work well on Debian GNU/kFreeBSD (FreeBSD kernel + GNU Libc).
This was already fixed in Ruby 1.9.
-
in process.c (re-)start timer thread (after_exec) only in parent,
as in child we know for sure that there is only one thread.
The fix-up in child is performed slightly later in rb_thread_atfork().
Also unify linux with rest of the systems.
In 1.9 series the code is completely reworked. -
in signal.c use pthread_sigmask instead of sigprocmask,
behaviour of sigprocmask is undefined in threaded programs, as stated in POSIX
(http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_sigmask.html).
In 1.9 series the code already uses pthread_sigmask:Sat Apr 24 00:41:52 2010 Yusuke Endoh mame@tsg.ne.jp
* signal.c: use pthread_sigmask() instead of sigprocmask(). sigprocmask() is unspecified behavior on multi-thread programs. [ruby-core:25217]
For more information, see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=595034
Patch attached. The signal.c part is hackish, and should be done properly in configure.
Please also backport to 1.8.7.
=end
Files
Updated by lucas (Lucas Nussbaum) almost 13 years ago
Hi,
I'm surprised this fix wasn't applied, and backported to 1.8.7...
Updated by naruse (Yui NARUSE) almost 13 years ago
- Tracker changed from Bug to Backport
- Project changed from Ruby 1.8 to Backport187
- Assignee set to shyouhei (Shyouhei Urabe)
Updated by shyouhei (Shyouhei Urabe) over 12 years ago
- Category set to core
- Status changed from Open to Assigned
process.c part is OK.
signal.c part is NG. Ruby 1.8 and under don't always use pthread so depending on environments, your patch might introduce additional dependencies, namely -lpthread. That's not a good thing to add today.
I'm trying to write fix this.
Updated by shyouhei (Shyouhei Urabe) over 7 years ago
- Status changed from Assigned to Closed