--==CelesteAttachment21924== Content-type: text/plain;charset=UTF-8
Hi Eliot, all,
There's a bug, or rather an omission, in #releaseCriticalSection: causing the following examples unwind incorrectly:
Mutex new inspect critical: [self halt]
If you run the example in a workspace, a debugger and an inspector opens - please watch Mutex's 'owner' variable; then step into a few times to get right before sending #primitiveExitCriticalSection and terminate the debugger (in the newest images please use debugger's window menu -> terminate process); and observe the owner won't get cleared and will remain blocking the Mutex. Same behavior for Semaphores:
Semaphore forMutualExclusion inspect critical: [self halt]
Again, watch Semaphore's excessSignals variable in the Inspector, step into a few times until you stand before sending #signal - and terminate the debugged process (from the debuggers menu or from the Process Browser if you like) - the Semaphore won't recharge excessSignals back to 1.
The root cause is #releaseCriticalSection: doesn't account for terminating in this particular position of the computation. It can be fixed e.g. by adding an additional condition ('progressedIntoEnsure') - try the examples with the enclosed changeset; both Mutexes and Semaphores work ok now.
Best,
~~~ ^[^ Jaromir
Sent from Squeak Inbox Talk ["Process-releaseCriticalSection.st"] --==CelesteAttachment21924== Content-transfer-encoding: base64 Content-disposition: attachment;filename="Process-releaseCriticalSection.st" Content-type: application/octet-stream;name="Process-releaseCriticalSection.st"
J0Zyb20gU3F1ZWFrNi4wYWxwaGEgb2YgMTcgRGVjZW1iZXIgMjAyMSBbbGF0ZXN0IHVwZGF0 ZTogIzIwODgwXSBvbiAyMSBEZWNlbWJlciAyMDIxIGF0IDY6MDQgcG0nIQ0NIVByb2Nlc3Mg bWV0aG9kc0ZvcjogJ3ByaXZhdGUnIHN0YW1wOiAnamFyIDEyLzIxLzIwMjEgMTY6MzUnIQ1y ZWxlYXNlQ3JpdGljYWxTZWN0aW9uOiBydW5uYWJsZQ0JIkZpZ3VyZSBvdXQgaWYgd2UgYXJl IHRlcm1pbmF0aW5nIGEgcHJvY2VzcyB0aGF0IGlzIGluIHRoZSBlbnN1cmU6IGJsb2NrIG9m IGEgY3JpdGljYWwgc2VjdGlvbi4NCSBJbiB0aGlzIGNhc2UsIGlmIHRoZSBibG9jayBoYXMg bWFkZSBwcm9ncmVzcywgcG9wIHRoZSBzdXNwZW5kZWRDb250ZXh0IHNvIHRoYXQgd2UgbGVh dmUgdGhlDQkgZW5zdXJlOiBibG9jayBpbnNpZGUgdGhlIGNyaXRpY2FsOiB3aXRob3V0IHNp Z25hbGluZyB0aGUgc2VtYXBob3JlL2V4aXRpbmcgdGhlIHByaW1pdGl2ZSBzZWN0aW9uLA0J IHNpbmNlIHByZXN1bWFibHkgdGhpcyBoYXMgYWxyZWFkeSBoYXBwZW5lZC4gIEJ1dCBpZiBp dCBoYXNuJ3QgbWFkZSBwcm9ncmVzcyBidXQgaXMgYmV5b25kIHRoZQ0JIHdhaXQgKHdoaWNo IHdlIGNhbiB0ZWxsIGJ5IHRoZSBvbGRMaXN0IGJlaW5nIG9uZSBvZiB0aGUgcnVubmFibGUg bGlzdHMsIGkuZS4gYSBMaW5rZWRMaXN0LCBub3QgYQ0JIFNlbWFwaG9yZSBvciBNdXRleCwg ZXQgYWwpLCB0aGVuIHRoZSBlbnN1cmU6IGJsb2NrIG5lZWRzIHRvIGJlIHJ1bi4iDQl8IHNl bGVjdG9ySnVzdFNlbnQgfA0JKHN1c3BlbmRlZENvbnRleHQgbWV0aG9kIHByYWdtYUF0OiAj Y3JpdGljYWxTZWN0aW9uKSBpZk5pbDogW15zZWxmXS4NCXNlbGVjdG9ySnVzdFNlbnQgOj0g c3VzcGVuZGVkQ29udGV4dCBzZWxlY3Rvckp1c3RTZW50T3JTZWxmLg0NCSJSZWNlaXZlciBh bmQvb3IgYXJndW1lbnQgYmxvY2tzIG9mIGVuc3VyZTogaW4gU2VtYXBob3JlPj5jcml0aWNh bDogb3IgTXV0ZXg+PiNjcml0aWNhbDoiDQlzdXNwZW5kZWRDb250ZXh0IGlzQ2xvc3VyZUNv bnRleHQgaWZUcnVlOg0JCVtzdXNwZW5kZWRDb250ZXh0IHNlbmRlciBpc1Vud2luZENvbnRl eHQgaWZUcnVlOg0JCQlbfCBub3RXYWl0aW5nQnV0TWFkZU5vUHJvZ3Jlc3MgcHJvZ3Jlc3Nl ZEludG9FbnN1cmUgfA0JCQkiQXZvaWQgcnVubmluZyB0aGUgZW5zdXJlOiBibG9jayB0d2lj ZSwgcG9wcGluZyBpdCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIHJ1bi4gSWYgcnVubmFibGUN CQkJIGJ1dCBhdCB0aGUgd2FpdCwgbGVhdmUgaXQgaW4gcGxhY2UuIE4uQi4gTm8gbmVlZCB0 byBjaGVjayBpZiB0aGUgYmxvY2sgcmVjZWl2ZXIgb2YgZW5zdXJlOiBoYXMNCQkJIG5vdCBz dGFydGVkIHRvIHJ1biAodmlhIHN1c3BlbmRlZENvbnRleHQgcGMgPSBzdXNwZW5kZWRDb250 ZXh0IHN0YXJ0cGMpIGJlY2F1c2UgZW5zdXJlOg0JCQkgdXNlcyB2YWx1ZU5vQ29udGV4dFN3 aXRjaCwgYW5kIHNvIHRoZXJlIGlzIG5vIHN1c3BlbnNpb24gcG9pbnQgYmVmb3JlIHRoZSB3 YWl0LiINCQkJIG5vdFdhaXRpbmdCdXRNYWRlTm9Qcm9ncmVzcyA6PQ0JCQkJcnVubmFibGUN CQkJCWFuZDogW3NlbGVjdG9ySnVzdFNlbnQgPT0gI3dhaXQNCQkJCWFuZDogW3N1c3BlbmRl ZENvbnRleHQgc2VuZGVyIHNlbGVjdG9ySnVzdFNlbnRPclNlbGYgPT0gI3ZhbHVlTm9Db250 ZXh0U3dpdGNoXV0uDQkJCSBwcm9ncmVzc2VkSW50b0Vuc3VyZSA6PQ0JCQkJcnVubmFibGUN CQkJCWFuZDogW3N1c3BlbmRlZENvbnRleHQgc2VuZGVyIHNlbGVjdG9ySnVzdFNlbnRPclNl bGYgPT0gI3ZhbHVlXS4NCQkJIChub3RXYWl0aW5nQnV0TWFkZU5vUHJvZ3Jlc3Mgb3I6IFtw cm9ncmVzc2VkSW50b0Vuc3VyZV0pIGlmRmFsc2U6DQkJCQlbc3VzcGVuZGVkQ29udGV4dCA6 PSBzdXNwZW5kZWRDb250ZXh0IGhvbWVdXS4NCQkgXnNlbGZdLg0NCSJFaXRoZXIgU2VtYXBo b3JlPj5jcml0aWNhbDogb3IgTXV0ZXg+PiNjcml0aWNhbDouICBJcyB0aGUgcHJvY2VzcyBz dGlsbCBibG9ja2VkPyAgSWYgc28sIG5vdGhpbmcgZnVydGhlciB0byBkby4iDQlydW5uYWJs ZSBpZkZhbHNlOiBbXnNlbGZdLg0NCSJJZiBzdGlsbCBhdCB0aGUgd2FpdCB0aGUgZW5zdXJl OiBibG9jayBoYXMgbm90IGJlZW4gYWN0aXZhdGVkLCBzbyBzaWduYWwgdG8gcmVzdG9yZS4i DQlzZWxlY3Rvckp1c3RTZW50ID09ICN3YWl0IGlmVHJ1ZToNCQlbc3VzcGVuZGVkQ29udGV4 dCByZWNlaXZlciBzaWduYWxdLg0NCSJJZiBzdGlsbCBhdCB0aGUgbG9jayBwcmltaXRpdmUg YW5kIHRoZSBsb2NrIHByaW1pdGl2ZSBqdXN0IGFjcXVpcmVkIG93bmVyc2hpcCAoaW5kaWNh dGVkIGJ5IGl0IGFuc3dlcmluZyBmYWxzZSkNCSB0aGVuIHRoZSBlbnN1cmUgYmxvY2sgaGFz IG5vdCBiZWVuIGFjdGl2YXRlZCwgc28gZXhwbGljaXRseSBwcmltaXRpdmVFeGl0Q3JpdGlj YWxTZWN0aW9uIHRvIHVubG9jay4iDQkoc2VsZWN0b3JKdXN0U2VudCA9PSAjcHJpbWl0aXZl RW50ZXJDcml0aWNhbFNlY3Rpb24NCSBvcjogW3NlbGVjdG9ySnVzdFNlbnQgPT0gI3ByaW1p dGl2ZVRlc3RBbmRTZXRPd25lcnNoaXBPZkNyaXRpY2FsU2VjdGlvbl0pIGlmVHJ1ZToNCQlb KHN1c3BlbmRlZENvbnRleHQgc3RhY2tQdHIgPiAwDQkJICBhbmQ6IFtzdXNwZW5kZWRDb250 ZXh0IHRvcCA9PSBmYWxzZV0pIGlmVHJ1ZToNCQkJW3N1c3BlbmRlZENvbnRleHQgcmVjZWl2 ZXIgcHJpbWl0aXZlRXhpdENyaXRpY2FsU2VjdGlvbl1dISAhDQ== --==CelesteAttachment21924==-- --=--