[Pharo-project] NonInteractiveTranscript holds reference to closed files
Sven Van Caekenberghe
sven at beta9.be
Thu Jul 5 18:14:36 EDT 2012
I am hitting this too now ;-)
So what will we do ?
The simplest solution seems option 2 with the improved #close behavior.
I will make a slice tomorrow.
On 27 Jun 2012, at 15:14, Sven Van Caekenberghe wrote:
> Hi Guillermomo,
> On 27 Jun 2012, at 14:50, Guillermo Polito wrote:
>> Select the three statements at once and evaluate them:
>> NonInteractiveTranscript stdout install.
>> Smalltalk snapshot: true andQuit: true.
>> Transcript show: 'hello'.
>> Then reopen your image... Bump! stdout is closed.
>> Of course, It got closed when the image quitted, but the NonInteractiveTranscript kept the reference to an invalid fileStream...
>> What should be a good solution for this?
>> - catch the error on the transcript and if closed reopen the file?
>> - subscribe to the shutdown list to void the reference?
>> - adding a SystemShutdown announcement and subscribe to it?
>> The third one seems... cleaner. But I'm not sure.
> Yes, the stream inside NonInteractiveTranscript should be set to nil whenever an image save closes stdout, so either option 2 or 3.
> Mind you that the current close/open/reopen logic is not good enough: stream is never set to nil .
> I think that open and reopen should be removed, and that close should become
> self critical: [
> stream ifNotNil: [
> self isStdout
> ifTrue: [ stream flush ]
> ifFalse: [ stream close ].
> stream := nil ] ]
> And then you should add some shutdown hook.
More information about the Pharo-dev