[M3devel] RegisterFinalCleanup and locking?
Jay K
jay.krell at cornell.edu
Tue Dec 15 04:01:55 CET 2009
I think RegisterFinalCleanup should be augmented or changed so that caller can use it without holding a lock, thereby avoiding holding two locks (RegisterFinalCleanup uses heap lock) and worrying about the order/deadlock.
Some sort of reserve/commit, reserve/cancel system.
Like:
cleanup := ReserveFinalCleanup(); (* can fail with exception*)
cleanup.object := mutex;
cleanup.function := CleanMutex;
...
CommitFinalCleanup(cleanup); (* cannot fail *)
or
CancelFinalCleanup(cleanup); (* cannot fail *)
I think it might not be at all difficult.
Or:
cleanup := ReserveFinalCleanup(); (* can fail with exception *)
..
CommitFinalCleanup(cleanup, mutex, CleanMutex);
or
CancelFinalCleanup(cleanup);
or:
cleanup := ReserveFinalCleanup(mutex, CleanMutex); (* can fail with exception *)
and then optional CancelFinalCleanup(cleanup);
but not sure the last one is viable.
Maybe:
UnsafeCollectNow(mutex);
?
Hm. Do we have that already? DISPOSE on traced references in unsafe code?
And it does or does not handle the registered cleanup? I'll check.
- Jay
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20091215/0b4bf888/attachment-0001.html>
More information about the M3devel
mailing list