Project

General

Profile

Actions

Backport #3779

closed

Threading issues on Debian GNU/kFreeBSD

Added by lucas (Lucas Nussbaum) over 13 years ago. Updated over 7 years ago.


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

      * 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

100901_threading_fixes.patch (2.65 KB) 100901_threading_fixes.patch lucas (Lucas Nussbaum), 09/01/2010 07:26 PM
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0