Marcel Taeumel uploaded a new version of KernelTests to project The Treated Inbox: http://source.squeak.org/treated/KernelTests-jar.431.mcz
==================== Summary ====================
Name: KernelTests-jar.431 Author: jar Time: 6 June 2022, 4:26:06.000182 pm UUID: 1c79cb69-dd24-6440-917f-0d3142fd4a17 Ancestors: KernelTests-jar.430
One more Process test; this verifies that if a terminating process gets stopped and terminated again, all unwinds execute correctly and the original terminator process terminates as well.
Such a situation may occur e.g. when a terminating process encounters an error and opens a debugger (or calls another recovery machinery). In such case it's legitimate to terminate the terminating process again (by closing the debugger or as a termination by another recovery tool).
Note: it's a different situation than in 'testTerminateTerminatingProcess' where the second termination is invoked "too early" and may cause unpredictable outcome - that test is still WIP.
Add testTerminateWithDelayInUnwind to the expectedFailures for the moment. Adopting #teminate for that scenario is WIP.
=============== Diff against KernelTests-jar.430 ===============
Item was changed: ----- Method: ProcessTest>>expectedFailures (in category 'failures') ----- expectedFailures
+ ^ #(testTerminateTerminatingProcess testResumeTerminatingProcess testTerminateWithDelayInUnwind)! - ^ #(testTerminateTerminatingProcess testResumeTerminatingProcess)!
Item was added: + ----- Method: ProcessTest>>testTerminateTerminatingProcessAfterUnwindStarted (in category 'tests') ----- + testTerminateTerminatingProcessAfterUnwindStarted + "Terminating a terminatee process after the terminator process restarted the terminatee + process should unwind the terminatee process and let the terminator process terminate." + + "Such a situation may occur e.g. when a terminating process encounters an error and + opens a debugger (or calls another recovery machinery). In such case it's legitimate + to terminate the terminating process again (by closing the debugger or as a termination + by another recovery tool). + + Note: this is a different situation than in 'testTerminateTerminatingProcess' where + the second termination is invoked 'too early' and may cause unpredictable outcome." + + | terminator terminatee unwound unwindBlock | + unwound := false. + unwindBlock := [Processor activeProcess suspend. unwound := true]. + terminatee := [[Semaphore new wait] ensure: unwindBlock] fork. + Processor yield. + terminator := [terminatee terminate] newProcess. + self assert: terminatee isBlocked. + self assert: terminator isSuspended. + terminator resume. + Processor yield. + "terminator starts terminatee's unwind" + Processor yield. + "terminatee resumes and stops at unwindBlock's #suspend" + self assert: terminatee isSuspended. + terminatee terminate. + self assert: terminatee isTerminated. + self assert: unwound. + self assert: terminator isTerminated!
packages@lists.squeakfoundation.org