On Sat, Mar 31, 2012 at 12:13 PM, Matthew Mondor <firstname.lastname@example.org>
It appears that it locks before all initial threads of the HTTPd can be
started. The REPL doesn't come back while that thread appears to be
waiting on a pthread_cond_wait(3) forever without getting an event.
This happens inside the GC, invoked sometime during HTTPD-INIT (that
happens in the first/main thread):
There were a bunch of problems with the previous code. From a wrong order in the arguments to pthread_sigmask() to the choice of signals. I have fixed them together with the following things
* Implemented semaphores
* Implemented barriers (copied part of the API from Lispworks, though I feel it is overengineered)
* mp:process-join relies on barriers (no trivial thing, the original code was a mess because of the lack of this tool)
* fixes in external processes, locking, etc.
In particular the changes to mp:process-join are quite critical for ECL being able to gracefully quit when there are running threads.
I can confirm that I am able to run your server and get decent connection times, slightly better than on OS X (see below). However, please bear in mind that I am running this all inside a virtualbox which may improve the stability, as processors are not really independent, but bound by the emulator.
Requests per second: 725.38 [#/sec] (mean)
Time per request: 22.057 [ms] (mean)
Time per request: 1.379 [ms] (mean, across all concurrent requests)
Transfer rate: 452.72 [Kbytes/sec] received