]> git.sur5r.net Git - openocd/commitdiff
resume is now asynchronous
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 18 Jul 2008 11:18:35 +0000 (11:18 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 18 Jul 2008 11:18:35 +0000 (11:18 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@828 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/target/target.c

index ea130ce3a52e42c06cfa4b69a937d0198a41b188..dd16c2bdfa137c9d0009625912746f06f0d4a016 100644 (file)
@@ -266,9 +266,6 @@ 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 retval;
-       int timeout_ms = 5000;
-       
-       enum target_state resume_state = debug_execution ? TARGET_DEBUG_RUNNING : TARGET_RUNNING;
        
        /* We can't poll until after examine */
        if (!target->type->examined)
@@ -277,24 +274,13 @@ int target_resume(struct target_s *target, int current, u32 address, int handle_
                return ERROR_FAIL;
        }
        
+       /* note that resume *must* be asynchronous. The CPU can halt before we poll. The CPU can
+        * even halt at the current PC as a result of a software breakpoint being inserted by (a bug?)
+        * the application.
+        */
        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)
-       {
-               target_call_timer_callbacks();
-               usleep(10000);
-               target_poll(target);
-               if ((timeout_ms -= 10) <= 0)
-               {
-                       LOG_ERROR("timeout waiting for target resume");
-                       return ERROR_TARGET_TIMEOUT;
-               }
-       }
-
        return retval;
 }