1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-05 07:15:39 +02:00

[231347] - [commands] The TX thread in the command control never terminates

This commit is contained in:
Pawel Piech 2008-05-09 18:01:44 +00:00
parent 36d8ba04ce
commit 9bff408ec5

View file

@ -65,7 +65,7 @@ public abstract class AbstractMIControl extends AbstractDsfService
implements ICommandControl implements ICommandControl
{ {
final static String PROP_INSTANCE_ID = MIPlugin.PLUGIN_ID + ".miControlInstanceId"; //$NON-NLS-1$ final static String PROP_INSTANCE_ID = MIPlugin.PLUGIN_ID + ".miControlInstanceId"; //$NON-NLS-1$
/* /*
* Thread control variables for the transmit and receive threads. * Thread control variables for the transmit and receive threads.
*/ */
@ -79,7 +79,14 @@ public abstract class AbstractMIControl extends AbstractDsfService
private final BlockingQueue<CommandHandle> fTxCommands = new LinkedBlockingQueue<CommandHandle>(); private final BlockingQueue<CommandHandle> fTxCommands = new LinkedBlockingQueue<CommandHandle>();
private final Map<Integer, CommandHandle> fRxCommands = Collections.synchronizedMap(new HashMap<Integer, CommandHandle>()); private final Map<Integer, CommandHandle> fRxCommands = Collections.synchronizedMap(new HashMap<Integer, CommandHandle>());
/**
* Handle that's inserted into the TX commands queue to signal
* that the TX thread should shut down.
*/
private final CommandHandle fTerminatorHandle = new CommandHandle(null, null);
/* /*
* Various listener control variables used to keep track of listeners who want to monitor * Various listener control variables used to keep track of listeners who want to monitor
* what the control object is doing. * what the control object is doing.
@ -170,6 +177,9 @@ public abstract class AbstractMIControl extends AbstractDsfService
commandHandle.getRequestMonitor().setStatus(genStatus("Connection is shut down")); //$NON-NLS-1$ commandHandle.getRequestMonitor().setStatus(genStatus("Connection is shut down")); //$NON-NLS-1$
commandHandle.getRequestMonitor().done(); commandHandle.getRequestMonitor().done();
} }
// Queue a null value to tell the send thread to shut down.
fTxCommands.add(fTerminatorHandle);
} }
/** /**
@ -467,7 +477,7 @@ public abstract class AbstractMIControl extends AbstractDsfService
break; // Shutting down. break; // Shutting down.
} }
if (commandHandle == null) { if (commandHandle == fTerminatorHandle) {
break; // Null command is an indicator that we're shutting down. break; // Null command is an indicator that we're shutting down.
} }