I get this stack trace: {frysk.proc.LinuxTask@754d7e0,pid=4173,tid=4173,state=runningInSyscall} in state "runningInSyscall" did not handle handleAddObserver frysk.proc.State.unhandled(FryskGui) frysk.proc.TaskState.handleAddObserver(FryskGui) frysk.proc.Task.handleAddObserver(FryskGui) frysk.proc.TaskObservation.handleAdd(FryskGui) frysk.proc.ProcState$3.handleAddObservation(FryskGui) frysk.proc.Proc.handleAddObservation(FryskGui) frysk.proc.Proc$6.execute(FryskGui) frysk.event.EventLoop.runEventLoop(FryskGui) frysk.event.EventLoop.run(FryskGui) frysk.gui.Gui$4.run(FryskGui) java.lang.Thread.run(libgcj.so.7rh) which relates to this process: ps -ax | grep 4173 4173 ? S 0:00 /bin/sh /usr/lib/firefox-1.5.0.6/run-mozilla.sh /usr/lib/firefox-1.5.0.6/firefox-bin -UILocale en-US It seems to happen 3 out of 5 times
Sami mentioned something along the lines that this change may have been a side effect of some recent commits made into SysCall that may have been made by you? Can you take a look Mark, and see?
Unfortunatley I had to reboot my machine, so disgregard PIDS above. In the UI add a syscall observer to a PID. (I did this via a session). The below exception is thrown from the core, and handed to the ui. {frysk.proc.LinuxTask@873240,pid=4151,tid=4151,state=runningInSyscall} in state "runningInSyscall" did not handle handleAddObserver frysk.proc.State.unhandled(FryskGui) frysk.proc.TaskState.handleAddObserver(FryskGui) frysk.proc.Task.handleAddObserver(FryskGui) frysk.proc.TaskObservation.handleAdd(FryskGui) frysk.proc.ProcState$3.handleAddObservation(FryskGui) frysk.proc.Proc.handleAddObservation(FryskGui) frysk.proc.Proc$6.execute(FryskGui) frysk.event.EventLoop.runEventLoop(FryskGui) frysk.event.EventLoop.run(FryskGui) frysk.gui.Gui$4.run(FryskGui) java.lang.Thread.run(libgcj.so.7rh) ps -ax | grep 4151 4151 ? S 0:00 /bin/sh /usr/lib/firefox-1.5.0.6/firefox -UILocale en-US
Created attachment 1263 [details] Frysk Core Event Log
I cannot immediately see which recent change could have caused this to happen. But I do see how to solve it. What do you exactly do when you trigger it? Did this work reliably a few days ago?
Reproducers: 1) Open a brand new session 2) Add BASH or your shell that you use (Bash makes lots of syscalls) 3) Add the Syscall observer from the next page 4) Launch the session 5) Observer the failure in the stacktrace posted in #2 (does not happen all the time, but most of the time it seems) 6) Look at the logs as posted in comment #3
The logs in comment #3 make clear that what happens is that a syscall observer fires on entry of the syscall, it gets blocked, then it gets unblocked and it runs inside the syscall, before the syscall exits a new observer is added. The runningInSyscall state doesn't handle addObserver so we get the unhandled exception. I cannot reproduce it with the instructions of comment #5 myself (FC5 x86_64 machine). But I should be able to write a testcase that replicates the events above.
Hopefully fixed by: 2006-09-01 Mark Wielaard <mark@klomp.org> * TaskState.java (runningInSyscall): Handle adding of Observer and SyscallObserver. * TestSyscallRunning.java: New file. 2006-09-01 Mark Wielaard <mark@klomp.org> * funit-syscall-running.c: New test prog.
Marks changes have fixed the issue in the UI.