Bug 3705

Summary: state "Attached.WaitForUnblock" did not handle handleRemoval
Product: frysk Reporter: Mark Wielaard <mark>
Component: generalAssignee: Mark Wielaard <mark>
Status: RESOLVED FIXED    
Severity: normal CC: mcvet
Priority: P2    
Version: unspecified   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:
Bug Depends on:    
Bug Blocks: 3346    

Description Mark Wielaard 2006-12-12 14:27:08 UTC
If I do a lot of instruction stepping on a multithreaded task I get
{frysk.proc.LinuxPtraceTask@2e43b60,pid=783,tid=785,state=Attached.WaitForUnblock}
in state "Attached.WaitForUnblock" did not handle handleRemoval

If you happen to try to remove an Observer while the Task is in that TaskState
then it craps out. That state should probably be merged with the general
BlockedSignal state which does handle it correctly. Now that I am tracing that
code I am surprized this doesn't happen more often. Aha, I see. You need to be a
bit unlucky to trigger this. Normally an Attach happens quick enough so there is
no time to add an Observer, make it trigger/block and then delete it without
unblocking it first.
Comment 1 Mike Cvet 2006-12-12 14:35:52 UTC
Referenced from material in #3696.

{frysk.proc.LinuxPtraceTask@2e43b60,pid=783,tid=785,state=Attached.WaitForUnblock}
 in state "Attached.WaitForUnblock" did not handle handleRemoval

frysk.proc.State.unhandled(FryskGui)
frysk.proc.TaskState.handleRemoval(FryskGui)
frysk.proc.Task.performRemoval(FryskGui)
frysk.proc.LinuxPtraceProc.sendRefresh(FryskGui)
frysk.proc.LinuxPtraceHost.sendRefresh(FryskGui)
frysk.proc.LinuxPtraceHostState$1.handleRefresh(FryskGui)
frysk.proc.Host$1.execute(FryskGui)
frysk.event.EventLoop.runEventLoop(FryskGui)
frysk.event.EventLoop.run(FryskGui)
frysk.gui.Gui$3.run(FryskGui)
java.lang.Thread.run(libgcj.so.7rh)
Comment 2 Mike Cvet 2006-12-14 19:39:36 UTC
Just got another one, slightly different:

{frysk.proc.LinuxPtraceTask@3967ceb5,pid=26079,tid=26079,state=blockedContinue} 
in state "BlockedSignal" did not handle handleRemoval

frysk.proc.State.unhandled(FryskGui)
frysk.proc.TaskState.handleRemoval(FryskGui)
frysk.proc.Task.performRemoval(FryskGui)
frysk.proc.LinuxPtraceProc.sendRefresh(FryskGui)
frysk.proc.LinuxPtraceHost.sendRefresh(FryskGui)
frysk.proc.LinuxPtraceHostState$1.handleRefresh(FryskGui)
frysk.proc.Host$1.execute(FryskGui)
frysk.event.EventLoop.runEventLoop(FryskGui)
frysk.event.EventLoop.run(FryskGui)
frysk.gui.Gui$3.run(FryskGui)
java.lang.Thread.run(libgcj.so.7rh)
Comment 3 Mark Wielaard 2007-03-30 16:00:17 UTC
Issue in comment #1 should have been fixed by:

2007-03-28  Mark Wielaard  <mark@klomp.org>

        * LinuxPtraceTaskState.java (attaching):
        Add handleUnblock, handleAddObservation and handleDeleteObservation.
        (Attached): Add handleTerminatedEvent.

The issue in comment #2 is something different and I'll have opened a new bug
#4298 for it.