Opened 5 years ago
Last modified 5 years ago
#805 new defect
Debug session not cleaned up if debugger gets killed
Reported by: | Jiri Svoboda | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | |
Component: | helenos/unspecified | Version: | mainline |
Keywords: | udebug | Cc: | |
Blocker for: | Depends on: | ||
See also: |
Description
Any number of tasks might have a phone Pn open to a target task T's kbox. At most one of them has an open debugging session (the debugger D). If a Pn is hung up, we call kbox_proc_phone_hungup(), which detects using call→sender == TASK→udebug.debugger that the sending task is D and it cleans up the debug session, unfreezing T.
Now if we kill D in the middle of a debugging session, ipc_cleanup() → phone_cap_cleanup_cb → ipc_phone_hangup which sends hangup_call which has →sender initialized to NULL.
This causes a problem since kbox_proc_phone_hungup() will see call→sender (NULL) != TASK→udebug.debugger and will not clean up the debugging session, leaving the task frozen.
Change History (3)
comment:1 by , 5 years ago
comment:2 by , 5 years ago
Keywords: | udebug added |
---|
comment:3 by , 5 years ago
This should not be the case of ipc_phone_hangup
as there we don't pre-forget the call in _ipc_call
, which would prevent _ipc_call_actions_internal
from setting the sender
. However, it seems to be the case of ipc_answerbox_slam_phones
, which pre-forgets the calls.
I guess you are right it has to do with properly disposing of all the calls of an exiting task.
On a related note, I am now working on an ipc2 branch, where I hope to address to cleanup part in a more elegant way.
Any ideas how to approach this? It seems to me maybe sender is NULL on purpose since the sender task is going away. Is the current way of cleaning up the debug session a good design? Or maybe we need something different?