[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-dev] Timeouts for GDB/MI commands (Was: [DSF] Making Sequence more robust)
|
On Thursday, October 20, 2011 21:40:17 Pawel Piech wrote:
> > 2. While a general repository for outstanding RM's might be a good idea,
> > what would you say if we start small, and implement the solution that
> > would remember outstanding RequestMonitor instances for some limited
> > cases (for example, 'target *-remote' commands in DSF-GDB, and then
> > cancel those RequestMonitors after a timeout? This is somewhat
> > orthogonal from the initial goal of catching lost RMs, but seems
> > sufficiently related and immediately useful.
>
> This is something that could be done at the service level, where these
> commands are issued. If we expect that the back-end may never complete
> some commands then in those cases a timeout guard should even be
> required. For example, we queue commands with the command control, but
> we count on the process monitor to notify us if the back end process
> dies. At that point we complete any outstanding command in queue with
> an error. So our process monitor is the guard.
We discussed this approach internally (turned out to be faster), and Mikhail
has proposed approach like this:
1. Add new interface:
interface IMIControlTimeoutPolicy {
void commandSend(CommandHandle);
void commandDone(CommandHandle);
}
2. Add new method AbstractMIControl.createTimeoutPolicy (returning null by default).
Adjust the code so that when this method returns non-null, the commandSend and commandDone
methods of the result are called by TxThread/RxThread as appropriate.
3. Make GDBControl.createTimeoutPolicy return a policy that sets a timer whenever a command
is sent, and if the command is not done within a timeout, just calls GDBControl.shutdown.
Does this seem reasonable, on a high level? We should be able to implement this fairly
quickly.
Thanks,
--
Vladimir Prus
CodeSourcery / Mentor Graphics
+7 (812) 677-68-40