[Openmcl-devel] process-run-function and mach ports usage
Gary Byers
gb at clozure.com
Thu Feb 17 14:28:38 PST 2011
Some things that have Mach ports associated with them and which are
created by PROCESS-RUN-FUNCTION aren't deallocated until the GC runs
and can prove that those things can no longer be referenced. I
generally see that the number of Mach ports visible to top increases
by 4 (pretty consistently) when a thread is created and decreases by 3
or 4 if (CCL:GC) is called in the listener after the thread exits.
(It may be necessary to type a few NILs to the REPL before calling the
GC, to ensure that the PROCESS object isn't sitting in */**/*** or
other REPL variables.) I don't understand why the GC doesn't always
free 4 ports (it seems to free 3 much more often), but I don't claim
to understand exactly what resources have ports associated with them
or why.
At this point, I'd probably say that it -looks- like there's a net loss
of ~1 port every time a thread is created and destroyed, but that isn't
entirely predictable I haven't looked at things over a long enough
period of time to have a sense of whether things are transient or whether
there's a true leak there.
(In the face of all this ignorance, I take comfort in the old adage that
says that "Mach sucks, but no one understands how.")
On Thu, 17 Feb 2011, Willem Rein Oudshoorn wrote:
>
> Hi,
>
> I am observing that in multithreaded applications the nr of used mach
> ports keep increasing indefinitely.
> Now I think this is not normal because other programs (non lisp) do
> not exhibit this behaviour. But I might be using threads wrong.
>
> Reproduction scenario
> ---------------------
>
> 1. Run top and watch the #PRTS column
> 2. start ccl
> 3. the value in #PRTS column is about 185.
> 4. execute the following expresion
>
> (ccl:process-run-function "name" (lambda ()))
>
> 5. Notice the value in teh #PRTS column is 4 higher than beore
> 6. It goes never down.
> 7. It will increase 4 by every execution of the 'process-run-function'
> function.
>
> Questions
> ---------
>
> 1. Is this bad?
> 2. Is there some cleanup needed after doing process-run-function ?
>
>
> Oh, I tested this with:
>
> "Version 1.6-dev-r14302M-trunk (DarwinX8632)"
> "Version 1.6-dev-r14302M-trunk (DarwinX8664)"
>
> On Mac OS X 10.5.8
>
> Kind regards,
> Wim Oudshoorn.
>
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel
>
>
More information about the Openmcl-devel
mailing list