Bug 2628 - Unhandeled state {frysk.proc.LinuxTask@4f64be0,pid=3048,tid=3048,state=detached} in state "detached" did not handle handleUnblock
Summary: Unhandeled state {frysk.proc.LinuxTask@4f64be0,pid=3048,tid=3048,state=detach...
Alias: None
Product: frysk
Classification: Unclassified
Component: general (show other bugs)
Version: unspecified
: P1 normal
Target Milestone: ---
Assignee: Andrew Cagney
: 2650 (view as bug list)
Depends on:
Blocks: 1516
  Show dependency treegraph
Reported: 2006-05-01 16:55 UTC by Sami Wagiaalla
Modified: 2006-05-30 06:43 UTC (History)
1 user (show)

See Also:
Last reconfirmed:


Note You need to log in before you can comment on or make changes to this bug.
Description Sami Wagiaalla 2006-05-01 16:55:51 UTC
Select a proc, add a FrokObserver, induce a fork
and boom:

Frysk Core has reported the following errors

{frysk.proc.LinuxTask@4f64be0,pid=3048,tid=3048,state=detached} in state
"detached" did not handle handleUnblock

frysk.proc.State.unhandled (FryskGui)
frysk.proc.TaskState.handleUnblock (FryskGui)
frysk.proc.Task$2.execute (FryskGui)
frysk.event.EventLoop.runEventLoop (FryskGui)
frysk.event.EventLoop.run (FryskGui)
frysk.gui.Gui$3.run (FryskGui)
java.lang.Thread.run (libgcj.so.7)
Comment 1 Stan Cox 2006-05-19 20:39:31 UTC
*** Bug 2650 has been marked as a duplicate of this bug. ***
Comment 2 Stan Cox 2006-05-22 23:00:49 UTC
I set a fork observer on bash then execute:
 find /home /lib /lib64 /bin /usr/bin /etc  -name 'x*'
frysk.gui.monitor.observers.TaskForkedObserver.bottomHalf calls
frysk.proc.Task.requestUnblock for:
 proc state=Detaching 
 task state=StartMainTask.wantToDetach

->calls blockOrDetach 
  ->calls sendDetach
  ->calls performTaskDetachCompleted
->calls handleUnblock

22-May-06 6:04:12 PM frysk.proc.TaskState$StartMainTask$5 handleStoppedEvent

22-May-06 6:04:12 PM frysk.proc.LinuxTask sendDetach

22-May-06 6:04:12 PM frysk.proc.Proc performTaskDetachCompleted

22-May-06 6:04:12 PM frysk.proc.TaskState$10 handleUnblock
{frysk.proc.LinuxTask@31c4e42d,pid=3387,tid=3387,state=running} handleUnblock

22-May-06 6:04:12 PM frysk.proc.TaskState$1 handleUnblock
{frysk.proc.LinuxTask@329e3395,pid=6682,tid=6682,state=detached} handleUnblock

Comment 3 Andrew Cagney 2006-05-30 06:43:11 UTC
I think this might have been a GUI bug, fixed with:

2006-05-30  Andrew Cagney  <cagney@redhat.com>

        * TaskObserver.java (Forked): Add method updateForkedOffspring.
        (Cloned): Add method updateClonedOffspring.
        * TestTaskObserverBlocked.java: Handle updateForkedOffspring, and
        * TestTaskObserverDetach.java: Ditto.
        * TestTaskForkedObserver.java: Handle updateForkedOffspring.
        * TestTaskClonedObserver.java: Handle updateClonedOffspring.
        * TaskState.java: Generate notifyForkedOffspring, and
        notifyClonedOffspring events.
        * Task.java (id, proc): Make final.
        (creator): New member.
        (Task): Initialize creator.
        (notifyClonedOffspring, notifyForkedOffspring): New.
        * ProcState.java ("detached" .handleAddTasksObserver): Add
        updateClonedOffspring to local class, block the offspring.

Note the last change, where it blocks the offspring (before it could run free
resulting in an attempt to unblock an unattached task).

This lead to the related change:

2006-05-30  Andrew Cagney  <cagney@redhat.com>

        * observers/TaskForkedObserver.java: Handle updateForkedOffspring.
        Always block both the parent and offspring (the bottomHalf always
        * observers/TaskCloneObserver.java: Handle updateClonedOffspring.
        * EventLogger.java: Handle updateForkedOffspring, and

in particular the updateForked* observers now always block (before the block was
conditional on something).  The lack of blocking could result in race conditions.