Commit 876297c2 authored by ntfreak's avatar ntfreak
Browse files

- target_resume is now synchronous with 5sec timeout

git-svn-id: svn://svn.berlios.de/openocd/trunk@775 b42882b7-edfa-0310-969c-e2dbd0fdcd60
parent f0f5157e
...@@ -264,6 +264,11 @@ int target_halt(struct target_s *target) ...@@ -264,6 +264,11 @@ int target_halt(struct target_s *target)
int target_resume(struct target_s *target, int current, u32 address, int handle_breakpoints, int debug_execution) int target_resume(struct target_s *target, int current, u32 address, int handle_breakpoints, int debug_execution)
{ {
int retval;
int timeout_ms = 5000;
enum target_state resume_state = debug_execution ? TARGET_DEBUG_RUNNING : TARGET_RUNNING;
/* We can't poll until after examine */ /* We can't poll until after examine */
if (!target->type->examined) if (!target->type->examined)
{ {
...@@ -271,7 +276,24 @@ int target_resume(struct target_s *target, int current, u32 address, int handle_ ...@@ -271,7 +276,24 @@ int target_resume(struct target_s *target, int current, u32 address, int handle_
return ERROR_FAIL; return ERROR_FAIL;
} }
return target->type->resume(target, current, address, handle_breakpoints, debug_execution); if ((retval = target->type->resume(target, current, address, handle_breakpoints, debug_execution)) != ERROR_OK)
return retval;
/* wait for target to exit halted mode */
target_poll(target);
while (target->state != resume_state)
{
usleep(10000);
target_poll(target);
if ((timeout_ms -= 10) <= 0)
{
LOG_ERROR("timeout waiting for target resume");
return ERROR_TARGET_TIMEOUT;
}
}
return retval;
} }
int target_process_reset(struct command_context_s *cmd_ctx) int target_process_reset(struct command_context_s *cmd_ctx)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment