<div dir="ltr"><br>Some more progress on aserve restarts failing.<br><br>The glitch that prevents aserve from restarting after a shutdown seems to be that worker threads waiting on a semaphore  are killed with process-kill.  Somehow, the semaphore and the kill don't mix.   <br>
<br>I changed it so that, at shutdown, waiting threads are not killed, but rather they are sent the wake-up semaphore. They then see that their parent webserver structure *wserver* has been shutdown or restarted, and terminate their waiting loop.  This should put the thread go into the exhausted state and make it gc'able. Threads that are running (not semaphore-waiting) at the time of the shutdown will  finish running, and will then see that a unique-id WSERVER-RUNNING of their server has changed, and will take that as a signal to quit.<br>
<br>The flaw that I see in my solution is that any worker threads currently serving will continue to serve their request, and will quit only after finishing their current page.  So any hung or infinitely long web pages will continue to churn along if their parent webserver is killed.  One could fix this by trying a process-kill after the semaphore signal is sent, but I'm leery of it.<br>
<br>Caveat: I really don't know what I'm doing.<br><br>The new aserve/<a href="http://main.cl" target="_blank">main.cl</a> is hosted at:<br>
<br>    <a href="http://www.mediafire.com/?2jdwitdjjt1" target="_blank">http://www.mediafire.com/?2jdwitdjjt1</a><br><br>I'll try to send it to the aserve list, but it looks dead.<br><br><div class="gmail_quote">On Tue, Sep 16, 2008 at 11:48 PM, John McAleely <span dir="ltr"><<a href="mailto:john@mcaleely.com" target="_blank">john@mcaleely.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">I can replicate the same symptom on my CCL setup (Clozure Common Lisp<br>
Version 1.2-r9226-RC1  (DarwinX8664)).<br>
<br>
I had to make a few changes to acl-compat to get it to work on a<br>
recent build of ccl. Perhaps this is another area that needs to be<br>
examined? Is it known if this function has ever worked on ccl in the<br>
same way as allegro?<br>
<br>
J<br>
<div><div></div><div><br>
<br>
On 17 Sep 2008, at 10:23, JTK wrote:<br>
<br>
><br>
> Hello again,<br>
><br>
> I've found that the problem of un-restartable portable allegroserve<br>
> can be 'solved' by removing a  line in aserve/<a href="http://main.cl" target="_blank">main.cl</a>  in which<br>
> a list of worker threads is killed:<br>
><br>
>    (dolist (th (wserver-worker-threads server))<br>
>     #+nil(acl-compat.mp:process-kill th) ;; get rid of this<br>
>     (acl-compat.mp:process-allow-schedule))<br>
><br>
> One finds that (acl-compat.mp:process-kill th) is just a an alias for<br>
> (ccl:process-kill th)<br>
><br>
> Evidently, killing threads breaks something.<br>
><br>
> Is it safe just to remove references to the worker processes  and<br>
> let the garbage collector clean them up?  That is,<br>
> (setf (wserver-worker-threads server) nil).<br>
><br>
> The problem is that the gc doesn't seem to reduce the processes left<br>
> behind by starting/stopping the server now, and the length of<br>
> (ccl:all-processes) just grows with the number of restarts even after<br>
> doing (gc)  between restarts.<br>
><br>
> Sorry about these aserve questions, but it seems like the aserve<br>
> list is dead, and this involves some subtle internals of CCL.<br>
><br>
> jan<br>
><br>
><br>
><br>
><br>
> On Sep 16, 2008, at 9:57 PM, JTK wrote:<br>
><br>
>> Hello,<br>
>><br>
>> I'm running CCL 1.2-r10552 PPC 32 and the latest CVS portableaserve<br>
>> (pretty old).<br>
>> This is on a G5 Mac with OS X 10.4.11<br>
>><br>
>> I find that I can't restart the server. The first start works fine,<br>
>> but the subsequent ones freeze.<br>
>><br>
>> eg:<br>
>><br>
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>
>> (net.aserve:start :port 8000)<br>
>> ;; server works OK<br>
>><br>
>> (net.aserve:shutdown)<br>
>> ;; server stopped OK - no connections accepted<br>
>><br>
>> (net.aserve:start :port 8000)<br>
>> ;; server now accepting connections, but the connection freezes<br>
>> ;; no log output appears.  A restarted server never works.<br>
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>
>><br>
>> I'm a bit stuck. Is anyone else using portable aserve?  Has anyone<br>
>> had<br>
>> success?  Or is<br>
>> there an updated version of aserve somewhere?  The aserve mail list<br>
>> is all spam, alas.<br>
>><br>
>> Many thanks,<br>
>> Jan<br>
><br>
</div></div>> _______________________________________________<br>
> Openmcl-devel mailing list<br>
> <a href="mailto:Openmcl-devel@clozure.com" target="_blank">Openmcl-devel@clozure.com</a><br>
> <a href="http://clozure.com/mailman/listinfo/openmcl-devel" target="_blank">http://clozure.com/mailman/listinfo/openmcl-devel</a><br>
><br>
<br>
_______________________________________________<br>
Openmcl-devel mailing list<br>
<a href="mailto:Openmcl-devel@clozure.com" target="_blank">Openmcl-devel@clozure.com</a><br>
<a href="http://clozure.com/mailman/listinfo/openmcl-devel" target="_blank">http://clozure.com/mailman/listinfo/openmcl-devel</a><br>
</blockquote></div><br></div>