TCF Agent: GDB Remote Serial Protocol: fixed handling of "vCont;r..." commands
diff --git a/agent/tcf/main/gdb-rsp.c b/agent/tcf/main/gdb-rsp.c
index 59e4912..8f73d89 100644
--- a/agent/tcf/main/gdb-rsp.c
+++ b/agent/tcf/main/gdb-rsp.c
@@ -675,7 +675,7 @@
     GdbThread * t = find_thread(c, c->cur_g_pid, c->cur_g_tid);
     if (t != NULL) {
         unsigned i;
-        add_res_str(c, t->bp_cnt > 0 ? "T05" : "T00");
+        add_res_str(c, "T05");
         add_res_str(c, "thread:");
         add_res_ptid(c, c->cur_g_pid, c->cur_g_tid);
         add_res_ch(c, ';');
diff --git a/agent/tcf/services/runctrl.c b/agent/tcf/services/runctrl.c
index 85fa9d0..573c479 100644
--- a/agent/tcf/services/runctrl.c
+++ b/agent/tcf/services/runctrl.c
@@ -882,23 +882,6 @@
     Context * grp = context_get_group(ctx, CONTEXT_GROUP_INTERCEPT);
     int err = 0;
 
-    EXT(grp)->reverse_run = 0;
-    switch (mode) {
-    case RM_REVERSE_RESUME:
-    case RM_REVERSE_STEP_OVER:
-    case RM_REVERSE_STEP_INTO:
-    case RM_REVERSE_STEP_OVER_LINE:
-    case RM_REVERSE_STEP_INTO_LINE:
-    case RM_REVERSE_STEP_OUT:
-    case RM_REVERSE_STEP_OVER_RANGE:
-    case RM_REVERSE_STEP_INTO_RANGE:
-    case RM_REVERSE_UNTIL_ACTIVE:
-        EXT(grp)->reverse_run = 1;
-        break;
-    }
-
-    if (context_has_state(ctx)) start_step_mode(ctx, c, mode, count, range_start, range_end);
-
     if (ctx->exited) {
         err = ERR_ALREADY_EXITED;
     }
@@ -908,13 +891,33 @@
     else if (count < 1) {
         err = EINVAL;
     }
-    else if (resume_context_tree(ctx) < 0) {
-        err = errno;
+
+    if (!err) {
+        EXT(grp)->reverse_run = 0;
+        switch (mode) {
+        case RM_REVERSE_RESUME:
+        case RM_REVERSE_STEP_OVER:
+        case RM_REVERSE_STEP_INTO:
+        case RM_REVERSE_STEP_OVER_LINE:
+        case RM_REVERSE_STEP_INTO_LINE:
+        case RM_REVERSE_STEP_OUT:
+        case RM_REVERSE_STEP_OVER_RANGE:
+        case RM_REVERSE_STEP_INTO_RANGE:
+        case RM_REVERSE_UNTIL_ACTIVE:
+            EXT(grp)->reverse_run = 1;
+            break;
+        }
+
+        if (context_has_state(ctx)) start_step_mode(ctx, c, mode, count, range_start, range_end);
+
+        if (resume_context_tree(ctx) < 0) {
+            err = errno;
+            cancel_step_mode(ctx);
+        }
     }
 
     assert(err || !ext->intercepted);
     if (err) {
-        cancel_step_mode(ctx);
         errno = err;
         return -1;
     }