target: improve robustness of polling and reexamination

When a target was present on OpenOCD start but later disappeared for
whatever reason (typically unstable connection or target going to
sleep) and reappeared only for a brief period of time, reexamination
would fail, and poll would no longer run. This patch fixes it.

Change-Id: I61f9b5a3f366a761320e233f4e1689f926b5556d
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Reviewed-on: http://openocd.zylin.com/2370
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Tested-by: jenkins
This commit is contained in:
Paul Fertser 2014-11-02 15:03:16 +03:00 committed by Spencer Oliver
parent 420bd49b5b
commit c120fb6d89
1 changed files with 7 additions and 1 deletions

View File

@ -2425,7 +2425,13 @@ static int handle_target(void *priv)
if (target->backoff.times > 0) {
LOG_USER("Polling target %s succeeded again, trying to reexamine", target_name(target));
target_reset_examined(target);
target_examine_one(target);
retval = target_examine_one(target);
/* Target examination could have failed due to unstable connection,
* but we set the examined flag anyway to repoll it later */
if (retval != ERROR_OK) {
target->examined = true;
return retval;
}
}
target->backoff.times = 0;