Re: Changeset 0306c5a64775
Roderic Morris <[email protected]> Thu, 14 Jun 2012 08:53:19 -0400
| Newsgroups | gmane.lisp.scheme.scheme48 |
|---|---|
| Message-ID | <[email protected]> |
Great! Related tests pass in scsh as well. Code looks good as well from what I've been able to check. I'm glad to see the ball moving on this, and I'm trying to do the same with my scheme48 based projects. One issue that you may or may not consider a release blocker though: scheme48 is almost unusably slow and resource intensive on OSX. It seems to be to happen when loading code, for instance ,opening posix takes at least a minute of 100% usage of a cpu core. Opening packages that don't use the FFI also seem to be unusually slow, though not nearly so. Even starting scheme48 has a noticeable pause. I believe it's related to the change to an llvm based compiler in the latest OSX releases. scheme48 1.8 doesn't seem to be affected though. -Roderic On Tuesday, June 12, 2012 at 2:32 PM, Michael Sperber wrote: > > Robert Ransom <[email protected] (mailto:[email protected])> writes: > > > See attached for a patch that fixes one clear bug in the > > external-events package. That doesn't fix the problem with > > wait-for-child-process. > > > > In order to fix the general problem of incorrect deadlock detection, I > > think we need: > > > > 1. a way to mark thread queues as ‘blocking on an external event’ for > > deadlock-detection purposes > > 2. a way to mark condvars and placeholders as ‘blocking on an external > > event’ (getaddrinfo and wait-for-child-process should be using > > placeholders; the posix-signals package should be using condvars) > > 3. support for registering long-term handlers to handle every > > occurrence of an external event UID > > 4. an as-general-as-possible ‘external asynchronous result’ system to > > handle placeholders which should be filled in from C > > > > > So I finally fixed (I hope) these issues - it took a whole bunch of > changes, along the lines of what Robert suggested: > > - Threads can, when blocking on an external event or something similar, > explicitly say that the blocking does not contribute to deadlock. > > - `wait-for-child-process' can now use a very simple implementation > using placeholders. > > - The race with external-event uids is fixed by allocating the uids in > Scheme rather than in C. It should now be possible to build a > higher-level abstraction for this with placeholders, but I haven't > done that yet. > > While the tests all succeed, and I've mulled over the changes quite a > while, are quite sensitive: Review and further testing much appreciated! > (Especially as this issue was the only one blocking the release.) > > Thanks to Robert and Roderic for analyzing the problems and for the > patches - extremely helpful! > > -- > Cheers =8-} Mike > Friede, Völkerverständigung und überhaupt blabla > >