[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
RE: [cdt-debug-dev] remove a thread from UI after terminating/disconnecting a process
|
This code is for efficiency. Rather than remove each thread as is
terminates, we remove them all at once (the viewer updates faster if there
100's/1000's of threads to be removed). However, there is a slight bug
here. When the launch terminates, a CONTENT change is handled for the
launch, which in turn refreshes the content of the target (and removes
threads). However, if a launch were to have multiple targets, the
terminated target would not get cleaned up properly. The target should
also fire a CONTENT change when it terminates to handle this properly.
Darin Wright
cdt-debug-dev-bounces@xxxxxxxxxxx wrote on 05/30/2007 05:36:41 PM:
> Yes, on termination, an ICDIDestroyedEvent (also an ICDIExitedEvent
> in our debugger) is fired.
> And an ICDIDisconnectedEvent is fired on "disconnect".
>
> CDebugTarget.handleDisconnectedEvent() does call removeAllThreads()
> asking core debugger to remove the threads, but due to the problem
> described in my original mail, core debugger fails to do that.
>
> Whereas, CDebugTarget.handleExitedEvent() does succeed in that
> aspect as it calls removeAllThreads() (and fireChangeEvent(
> DebugEvent.CONTENT )) at the beginning.
>
> I can do same thing in handleDisconnectedEvent() as in
> handleExistedEvent() to fix the problem, but I think the better
> solution is to change the core code.
>
> -- Ling
>
> From: cdt-debug-dev-bounces@xxxxxxxxxxx [mailto:cdt-debug-dev-
> bounces@xxxxxxxxxxx] On Behalf Of ext Doug Schaefer
> Sent: Wednesday, May 30, 2007 5:13 PM
> To: CDT Debug developers list
> Subject: RE: [cdt-debug-dev] remove a thread from UI after
> terminating/disconnecting a process
> I’ve run into the same thing in the early stages of my Windows
> debugger (which I’ve started up again, BTW). The target only gets
> terminated when an ICDIDestroyedEvent gets dispatched. I’ve made
> sure I dispatch one when I got notified that the process has
> actually terminated. Or are you already doing that?
>
> Doug Schaefer, QNX Software Systems
> Eclipse CDT Project Lead, http://cdtdoug.blogspot.com
>
> From: cdt-debug-dev-bounces@xxxxxxxxxxx [mailto:cdt-debug-dev-
> bounces@xxxxxxxxxxx] On Behalf Of Ling.5.Wang@xxxxxxxxx
> Sent: Wednesday, May 30, 2007 5:39 PM
> To: cdt-debug-dev@xxxxxxxxxxx
> Subject: [cdt-debug-dev] remove a thread from UI after
> terminating/disconnecting a process
>
> Hi,
>
> This is an issue found in CDT debugger but it's more related to
> platform debugger code. I know some platform debugger gurus like
> Darin are on the list, so I'm sending this here.
>
> I see this bug in our Nokia CDT-based debugger, but it's a generic
> problem in any CDT debugger.
>
> During a debug session with multiple processes in Launch View, I
> select a process (target) and click the "Disconnect" command, then
> the process is shown as "disconnected" in Launch View but its
> threads and stackframes remain in the view, which is not good.
>
> I can work around the bug by changing CDT code, but I think a better
> fix should be done in the platform.
>
> Here's the code of
> org.eclipse.debug.internal.ui.viewers.update.ThreadEventHandler.
> handleTerminate()
>
> protected void handleTerminate(DebugEvent event) {
> IThread thread = (IThread) event.getSource();
> IDebugTarget target = thread.getDebugTarget();
> // ignore thread termination if target is terminated/disconnected
> if (!(target.isTerminated() || target.isDisconnected())) {
> fireDeltaAndClearTopFrame(thread, IModelDelta.REMOVED);
> }
> }
> The code in red & italics does not make much sense to me. When a
> thread is terminated, why shouldn't we remove it from the UI if the
> owning process is terminated/disconnected ? Why leave the zombie there
?
>
> In CDT (e.g. org.eclipse.cdt.debug.internal.core.model.CDebugTarget.
> handleDisconnectedEvent()), when a target/process is
> terminated/disconnected, the target is marked
> terminated/disconnected and TerminateEvent's are fired for all
> threads in the processs. As the events are handled asynchronously by the
> ThreadEventHandler.handleTerminate(), the condition check in red may
> become true and thus the threads are not removed from UI.
>
> So is it ok to remove the condition check ?
>
> Regards.
>
> -- Ling
>
> _______________________________________________
> cdt-debug-dev mailing list
> cdt-debug-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/cdt-debug-dev