Re: OOP leaking with registered object

Holger Hans Peter Freyther <[email protected]>
Newsgroups gmane.comp.lang.smalltalk.gnu.general
Message-ID <[email protected]>
On Tue, Apr 07, 2015 at 06:18:13PM +0200, Roland Plüss wrote:

> I'm using a similar trick in my own scripting language. Hoped I can get
> away in Smalltalk without it. It's certainly a working solution albeit
> not the most good one. Should do the trick for the time being.

Okay, what else do you think the VM can do? E.g. if I would
implement a "shutdown" command I would suspend all processes,
then run the global collection, then look at gcArray iterate
over them to call mourn.

"Stop the normal handling"
proc := (Process allInstances select: [:each |
		each name = 'finalization listener']) first suspend

"Check if other finalizers run or wait..This runs the risk if
new garbage is produced.. the vm will be upset and aborts.."
[(Process allInstances select: [:each | each name = 'finalization worker']) isEmpty]
	whileFalse: [Processor yield]


"Run GC which will signal finalization.."
ObjectMemory globalGarbageCollect

"Take the to be finalized array and mourn"
garbage := Processor instVarNamed: #gcArray
garbage ifNotNil: [garbage do: [:each | each mourn]]


Specially step 1 and 2 is a bit dangerous. You should suspend
other processes/work too to prevent from more GC to be produced.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.