[#24105] [Bug #1711] Marshal Failing to Round-Trip Certain Recurisve Data Structures — Run Paint Run Run <redmine@...>

Bug #1711: Marshal Failing to Round-Trip Certain Recurisve Data Structures

9 messages 2009/07/01

[#24116] [Bug #1715] Numeric#arg for NaN is Inconsistent Across Versions — Run Paint Run Run <redmine@...>

Bug #1715: Numeric#arg for NaN is Inconsistent Across Versions

10 messages 2009/07/02

[#24240] [Bug #1755] IO#reopen Doesn't Fully Associate with Given Stream on 1.9; Ignores pos on 1.8 — Run Paint Run Run <redmine@...>

Bug #1755: IO#reopen Doesn't Fully Associate with Given Stream on 1.9; Ignores pos on 1.8

8 messages 2009/07/09

[#24321] [Bug #1773] Gem path doesn't honor user gem? — Lin Jen-Shin <redmine@...>

Bug #1773: Gem path doesn't honor user gem?

12 messages 2009/07/14

[#24390] [Feature #1784] More encoding (Big5 series) support? — Lin Jen-Shin <redmine@...>

Feature #1784: More encoding (Big5 series) support?

12 messages 2009/07/16

[#24467] Re: [ruby-cvs:31226] Ruby:r24008 (ruby_1_8_6): Removed private on to_date and to_datetime. — Urabe Shyouhei <shyouhei@...>

Hello.

10 messages 2009/07/21

[#24472] [Feature #1800] rubygems can replace system executable files — Kazuhiro NISHIYAMA <redmine@...>

Feature #1800: rubygems can replace system executable files

13 messages 2009/07/21

[#24530] [Feature #1811] Default BasicSocket.do_not_reverse_lookup to true — Roger Pack <redmine@...>

Feature #1811: Default BasicSocket.do_not_reverse_lookup to true

9 messages 2009/07/23

[#24624] [Bug #1844] Immediates Should Not Respond to :dup — Run Paint Run Run <redmine@...>

Bug #1844: Immediates Should Not Respond to :dup

15 messages 2009/07/30

[ruby-core:24516] Re: [Bug #1525] Deadlock in Ruby 1.9's VM caused by ConditionVariable.wait and fork?

From: "none <" <tetsu.soh.dev@...>
Date: 2009-07-23 02:12:33 UTC
List: ruby-core #24516
Lee Hinman wrote:
> On Jul 21, 2009, at 9:06 PM, Vanja Bucic wrote:
>> Issue #1525 has been updated by Vanja Bucic.
>>
>>
>> Just to chime in on this issue.
>>
>> It is affecting our company as well. We run our software on apple 
>> machines in a server environment.
>> Our application is a multithreaded daemon process that is accessing 
>> mysql database pretty often. Some of these threads fork off a task 
>> that may take some time to complete. It has worked well prior to ruby 
>> 1.9.  Since then we have tried to find a workaround but to no avail. 
>> Any attempts to use fork in our application will result in deadlocks 
>> 8/10 times.
>> It deadlocks in weirdest places, like 'puts'  or mysql.query (which 
>> we know is setting global lock internally, but should be thread safe).
>>
>> Any ideas and attempts to resolve this ASAP are welcome.
>
> I ran into this issue a while back trying to fix the forkoff library 
> for Ruby 1.9.1. I too would like to know what's causing it, I was 
> wondering if the error man pertain to this (from the fork man page):
>
> "A process shall be created with a single thread. If a multi-threaded 
> process calls fork(), the new process shall contain a replica of the 
> calling thread and its entire address space, possibly including the 
> states of mutexes and other resources. Consequently, to avoid errors, 
> the child process may only execute async-signal-safe operations until 
> such time as one of the exec functions is called. Fork handlers may be 
> established by means of the pthread_atfork() function in order to 
> maintain application invariants across fork() calls."
>
> Hopefully someone more familiar with Ruby internals may know what's 
> causing it. Anyone?
>
> - Lee
>
Yes. As you mentioned, this bug related to inappropriate usage of 
non-async-signal-safe functions in a forked child process. And this is a 
already known issue which has been reported on BSD systems.

(Let's call it a *issue* but not a *bug* because this is the 
specification of pthread.)

Because users are free to do anything in a forked child process through 
Ruby's interface, it is hard to avoid this kind of error by Ruby 
interpreter. However, the developer are trying to reduce the chance of 
this kind of error by postponing internal thread generation.

IMHO, from the respective of user, although it is hard, try not to use 
any non-async-signal-safe functions in a forked child process before any 
exec functions are called.

- Tetsu

In This Thread