Summary: | FryskHelpManager initial startup causes backtrace | ||
---|---|---|---|
Product: | frysk | Reporter: | Rick Moseley <rmoseley> |
Component: | general | Assignee: | Unassigned <frysk-bugzilla> |
Status: | NEW --- | ||
Severity: | normal | CC: | cagney |
Priority: | P2 | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Host: | Target: | ||
Build: | Last reconfirmed: | ||
Bug Depends on: | |||
Bug Blocks: | 2248 |
Description
Rick Moseley
2007-01-26 14:51:42 UTC
I think I know whats happening, and wow, that means frysk's core is being pretty agressive! - the desktop thread calls frysk.sys.Fork.daemon which: does a vfork as the first step in creating a daemon, and then does a waitpid on the child - meanwhile the core thread sees the SIGCHLD for that same waitpid and grabs it - this leaves the desktop process's waitpid with nothing to wait for, hence the error That means the core is going to need to directly handle the child create, and the help code just request it. As a way of confirming this, try using: frysk.proc.Host.requestCreateAttachedProc (String[] args, null) i.e., no observer. It should create the process and then immediatly detach from it. Perhaps a: frysk.proc.Host.requestCreateDaemonProc (String[] args) should be added. I converted to using a call to "Manager.host.requestCreateAttachedProc(args, null);" to activate the help. It comes up OK, but now when the help is terminated I get this from the core: {frysk.proc.LinuxPtraceTask@f52690,pid=31805,tid=31805,state=detached} in state "detached" did not handle handleTerminatedEvent java.lang.RuntimeException: {frysk.proc.LinuxPtraceTask@f52690,pid=31805,tid=31805,state=detached} in state "detached" did not handle handleTerminatedEvent at frysk.proc.State.unhandled(FryskGui) at frysk.proc.TaskState.handleTerminatedEvent(FryskGui) at frysk.proc.Task.processTerminatedEvent(FryskGui) at frysk.proc.LinuxPtraceHost$PollWaitOnSigChld$5.terminated(FryskGui) at frysk.sys.Wait.waitAllNoHang(FryskGui) at frysk.proc.LinuxPtraceHost$PollWaitOnSigChld.execute(FryskGui) at frysk.event.EventLoop.runEventLoop(FryskGui) at frysk.event.EventLoop.run(FryskGui) at frysk.gui.Gui$4.run(FryskGui) at java.lang.Thread.run(libgcj.so.7) I suspect passing a "null" in as the type of observer to attach is throwing it off. Looks like we do need a frysk.proc.Host.requestCreateDaemonProc (String[] args) method. That's a new and obscure bug. If a child process (not a daemon, not a random process) becomes detached and then exits, frysk gets confused. It occures because frysk still gets the waitpid event for the child's exit, even though frysk isn't attached. |