[Openmcl-devel] slime, cocoa, autorelease

Ben Hyde bhyde at pobox.com
Thu Feb 4 07:35:36 PST 2010


<?email bottom-posting ?>

On Feb 4, 2010, at 3:19 AM, Tobias C. Rittweiler wrote:
> Gary Byers <gb at clozure.com> writes:
>
>> If I understand correctly, there's no point in trying to implement
>> the standard REPL's autorelease-pool-related toplevel commands in
>> SLIME (at least under SLIME's default "communication style".)
>>
>> In a Cocoa listener thread (or the original bistener thread in the
>> hybrid (REQUIRE "COCOA") environment) an autorelease pool us created
>> at thread startup; autoreleased objects are added to this pool when  
>> no
>> more recently-established dynamic pool is in effect.  Some toplevel
>> commands can be used to examine this global pool's contents and to
>> release the global pool and its contents and establish a new one.  (I
>> -think- that it's the case that the global pool is released when the
>> thread exits.)  This isn't quite the same as running inside a
>> WITH-AUTORELEASE-POOL, but it keeps things from completely leaking
>> (and suppesses those warning messages.)
>>
>> When SLIME/SWANK is using the "spawn" communication style, each
>> form entered into a SLIME REPL is executed in a separate thread.
>> (I have no idea why, but it does exercise all of the timing screws
>> that can occur when threads exit and exposes some current bugs with
>> thread cleanup on Windows ...).  The single global autorelease pool
>> per thread model can't work in that approach  and the REPL commands
>> for dealing with that global pool wouldn't be meaningful.
>
> That's not quite true. Forms entered into the Slime REPL are all
> executed in the same REPL thread. All other operations (C-c C-c, C-M- 
> x,
> etc.)  are executed in their own worker threads, though.
>
>  -T.

Tobias is right and I'd go a bit further.  It all works out fine.  In  
my patch I gave all swank's ccl threads an auto release pool.  For the  
"other operations" that mimics the very short lived auto release pools  
seen in more typical COCOA event handling; which is way useful since  
lots of COCOA processing needs an auto release pool to own things  
transiently.   Since the slime REPL buffer gets a long lived thread  
that auto release pool is conveniently never drained.  This is  
identical to what the IDE's listener is doing, except for the lack of  
"top level commands."

My current frustration with my patch is that the swank-ccl compiled  
for #+cocoa is useless if loaded into a leaner #-cocoa image.  It will  
be ugly, but I think I maybe I'll defer the choice to run time.

  - ben



More information about the Openmcl-devel mailing list