Nobuyoshi Nakada wrote:
> 
> It does solve nothing.
> 
> The point of this problem is that ruby interpreter is not
> thread-safe as a library, so that you must not call it in
> native-threads other than the native-thread on which ruby
> itself is running.  Instead, you have to send any requests to
> the native-thread and process them in it.

But like I said, I'm not using it in a non-thread safe way.
Only a single ruby thread keeps running ruby code at a time.

This should be equivalent to having a global lock and running
eval("sth") each time.

Whether the thread_id for it is 0, 1, 2, etc. should not be relevant.
Or is there anything in the ruby code that makes this impossible?  It
seems only the GC is constrained by needing info about the stack.  But
resetting the stack on each iteration should (mostly) address this.
There's still the rare possibility of some temporary VALUEs on the stack
of the main thread being collected when the new thread with the new
stack beginning runs, but this should be rather rare (I can only think
this can happen if an extension invokes a new thread which in turn calls
some other extension).

Any static or global variables should be fine by being invoked in
different threads.

> (not sure what its
>> purpose is, either -- seems like if you are reading
>> getrlimit values you should use them as is).
> 
> To try to catch stack overflow.
> 

Still don't follow.  Shouldn't the arbitrary / 5 already leave enough
headroom for this?  Why the need for the clamp?

> 
> It does know about the native-threads which are created in
> ruby.  Therefore, you can't store VALUEs on the stacks of other
> threads.
> 

Ouch.  This sounds much worse than 1.8.  How do any C extensions work at
all on a ruby thread other than the main ruby thread?
If I read this correctly, doing something as simple as:

	VALUE c;

in any extension will just make the extension not work at all on other
threads.  This seems to break, well..., everything.
Or VALUE would need to become a C++ class, with proper
registering/unregistering with the GC then.

> [patch attached...]

What's this?  This is not my patch (have not sent it yet -- or written
it, for that matter).

-- 
Gonzalo Garramu˝´
ggarra / advancedsl.com.ar

AMD4400 - ASUS48N-E
GeForce7300GT
Kubuntu Edgy