[MacRuby-devel] [MacRuby] #768: Timeout is broken. It seems MacRuby does not dispatch the Thread.

Chuck Remes cremes.devlist at mac.com
Wed Jun 30 19:51:42 PDT 2010


On Jun 30, 2010, at 8:07 PM, MacRuby wrote:

> #768: Timeout is broken. It seems MacRuby does not dispatch the Thread.
> ----------------------------------+-----------------------------------------
> Reporter:  watson1978@…          |        Owner:  lsansonetti@…        
>     Type:  defect                |       Status:  closed               
> Priority:  blocker               |    Milestone:                       
> Component:  MacRuby               |   Resolution:  duplicate            
> Keywords:                        |  
> ----------------------------------+-----------------------------------------
> Changes (by martinlagardette@…):
> 
>  * status:  new => closed
>  * resolution:  => duplicate
> 
> 
> Comment:
> 
> This is a duplicate of a know bug: #176
> 
> The problem is not that the thread is not dispatched. It is actually
> dispatched. But the dispatched thread is not the one that does the
> operation, it's a thread that sleep for whatever was passed to timeout,
> and then sends "cancel" to the main thread. However, with the way MacRuby
> implements threads (with pthread), it's not possible to cancel the main
> thread without breaking everything :D.
> 
> We're working on it, and waiting to find a solution.

I believe the rubinius guys solved this using the following trick. I may also be completely wrong about it. :)

When you create a timeout thread, also create a named socket (or pipe) and add its file descriptor to the set of descriptors that the main loop selects/polls on. Have your timeout thread wake and signal that file descriptor. The main loop will detect the signal on that descriptor and do the appropriate thing.

That's also a technique for having signal handlers cleanly terminate the process. They can signal another FD which causes the main loop to clean up after itself and shutdown nicely.

cr



More information about the MacRuby-devel mailing list