On Jun 30, 2010, at 8:07 PM, MacRuby wrote: > #768: Timeout is broken. It seems MacRuby does not dispatch the Thread. > ----------------------------------+----------------------------------------- > Reporter: watson1...@… | Owner: lsansone...@… > Type: defect | Status: closed > Priority: blocker | Milestone: > Component: MacRuby | Resolution: duplicate > Keywords: | > ----------------------------------+----------------------------------------- > Changes (by martinlagarde...@…): > > * 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 _______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel