[squeak-dev] Re: DebuggerUnwindBug>>testUnwindDebuggerWithStep

stephane ducasse stephane.ducasse at free.fr
Sun Jun 22 16:07:42 UTC 2008


andreas

when you use simulation you mean the debugger execution?

Stef

On Jun 22, 2008, at 1:33 AM, Andreas Raab wrote:

> So having looked more closely into this issue I am by now convinced  
> that this is a bug in the simulation machinery. The point is that  
> we're simulating stepping out of a semaphore wait, e.g.,
>
>  sema := Semaphore new.
>  process := [sema wait] forkAt: Processor activePriority + 1.
>  ctx := process completeStep: process suspendedContext.
>
> At this point we're out of the semaphore wait and consequently the  
> suspendingList of the process should be nil but it ain't. I've  
> attached two tests which illustrate the problem.
>
> Cheers,
>  - Andreas
>
>
> Andreas Raab wrote:
>> Hi Norbert -
>> Good find. The test is interesting since it illustrates behavior  
>> that can *only* happen during simulation. Unless simulated, the  
>> return from the preceding wait and the activation of the block are  
>> atomic so you'd never be able to get into the spot that this  
>> particular test uses. The test itself was intended to show a  
>> somewhat different problem but it should be made to work since I  
>> don't see why one should't be able to terminate the debugger in  
>> this spot and expect things to work. I'll have to ponder this one a  
>> little since there are many implications there.
>> Cheers,
>>  - Andreas
>> Norbert Hartl wrote:
>>> This test case appears at some point to fail. It succeeds in 3.9.
>>> I narrowed the problem to an update of 3.9.1 with update 7071
>>> (Kernel-sd.151) which introduced it.
>>> The piece of code that triggers it is:
>>>
>>> Process>>terminate
>>> ...
>>> suspendedContext ifNotNil: [
>>>   "Figure out if we are terminating the process while waiting  
>>> in       Semaphore>>critical: In this case, pop the  
>>> suspendedContext so that
>>>    we leave the ensure: block inside Semaphore>>critical: without
>>>    signaling the semaphore."
>>>      (inSema == true and:[
>>>         suspendedContext method == (
>>>            Semaphore compiledMethodAt: #critical:) ]) ifTrue:[
>>>               suspendedContext := suspendedContext home.
>>>         ].
>>> ...
>>>
>>> I don't really understand the rationale behind doing this but it
>>> seems that it conflicts with the test assumption:
>>>
>>> DebuggerUnwindBug>>testUnwindDebuggerWithStep
>>> ...
>>>   debugger doStep.
>>>   "close debugger"
>>>   top delete.
>>>
>>>   "and see if unwind protection worked"
>>>   self assert: sema isSignaled.
>>>
>>> As I don't really understand what happens and what should happen I  
>>> would
>>> be glad to hear some words of advice.
>>>
>>> Norbert
>>>
>>>
>>>
>
> <SimulationBugs.st>




More information about the Squeak-dev mailing list