[Openmcl-devel] Confused about processes

Sven Van Caekenberghe sven at beta9.be
Sun Jan 18 15:37:16 UTC 2004


On 18 Jan 2004, at 02:06, Gary Byers wrote:

> On Sat, 17 Jan 2004, Sven Van Caekenberghe wrote:
>
>> A couple of days ago I rewrote the bulk mailing functionality of our
>> web application into a seperate process, so that the mailing is spread
>> over 12 hours (to save bandwidth afterwards when people start reading
>> the HTML mail ;-).
>>
>> So what I do is spawn a process from the paserve handler that splits
>> the job in 12 parts, sleeping for 1 hour in between and then ends:
>> progress is reported by sending email to a specified email address. As
>> far as I can tell, everything went fine: all test mails and
>> confirmation mails were sent.
>>
>> The debugging web app shows the following process listing:
>>
>> (#<PROCESS execute-mailing(22) [exhausted] #x55A6946>
>>   #<PROCESS execute-mailing(20) [exhausted] #x5585D1E>
...

>>   #<PROCESS Initial(0) [Sleeping] #x50C8D5E>)
>>
>> Both 'execute-mail' process are ended but are still in an 'exhausted'
>> state - as far as I understand my own code, the function that was the
>> body of the process returned. What does this state mean ? Why is the
>> process still there ?
>
> Are the "execute-mailing" processes created via PROCESS-RUN-FUNCTION,
> or via MAKE-PROCESS/PROCESS-PRESET/PROCESS-ENABLE ?
>
> Do the "exhausted" processes respond to PROCESS-KILL ?

>> I tried to recreate this problem in a listener, but failed to do that 
>> -
>> since the server is (of course) still running, I can go in and try to
>> inspect the process, but I don't know what I should look for. Any 
>> ideas?

OK, I figured out why I failed to reproduce the problem in a plain 
image: I was using the PROCESS-RUN-FUNCTION from the ACL-COMPAT layer 
of paserve (from the 1.2.12c release on OpenMCL 0.13.6). That 
particular version of PROCESS-RUN-FUNCTION does work OK in the lastest 
CVS version of paserve (both on OpenMCL 0.14 and LispWorks 4.3, 
though).

Now looking at the implementation of PROCESS-RUN-FUNCTION in 
acl-mp-mcl.lisp (CVS version 1.1), I see that they are indeed use the 
MAKE-PROCESS/PROCESS-PRESET/PROCESS-ENABLE route. When I try this 
manually I can reproduce the error:

Welcome to OpenMCL Version (Beta: Darwin) 0.13.6!
? (defun count-to (n stream) (dotimes (i n) (print i stream)))
COUNT-TO
? (process-run-function "test" #'count-to 10 *standard-output*)
#<PROCESS test(2) [Enabled] #x52AC9EE>
?
0
1
2
...
9
:proc
1 :    external-process-watchdog  [Suspended]
0 : -> Initial      [Running]  (Active)
? (make-process "test")
#<PROCESS test(4) [exhausted] #x52AF746>
? (process-preset * #'count-to 10 *standard-output*)
#<PROCESS test(4) [Suspended] #x52AF746>
? (process-enable *)
(#<PROCESS Initial(0) [Suspended] #x50D124E> #<PROCESS test(4) 
[Enabled] #x52AF746>)
?
0
1
2
...
9
:proc
4 :    test         [exhausted]
1 :    external-process-watchdog  [Suspended]
0 : -> Initial      [Suspended]  (Active)
? (:kill 4)
? :proc
1 :    external-process-watchdog  [Suspended]
0 : -> Initial      [Suspended]  (Active)

Although the documentation says that PROCESS-RUN-FUNCTION and 
MAKE-PROCESS/PROCESS-PRESET/PROCESS-ENABLE do the same thing, the 
actual implementation in l1-processes is slighly more complicated to 
put it mildly ;-)

The above sequences *does* work as expected under OpenMCL 0.14-031220.

Sven




More information about the Openmcl-devel mailing list