target: use LOG_USER to print errors in events
authorAntonio Borneo <borneo.antonio@gmail.com>
Mon, 1 Apr 2019 08:34:25 +0000 (10:34 +0200)
committerTomas Vanek <vanekt@fbl.cz>
Tue, 14 May 2019 18:33:13 +0000 (19:33 +0100)
Events are supposed to be executed asynchronously and not linked
with any command, so it's incorrect printing out an eventual error
using command_print().
Even in the case of events triggered by the command
<target> invoke-event <event-name>
the eventual error in the event handler is not propagated to the
command, so the command_print() is still not appropriate.

Replace command_print() with LOG_USER() in target_handle_event().
Add further info in the log to identify which event has generated
the error and its associated target.
Before return, clean-up the error message and the stacktrace from
the error already displayed, to avoid propagate them.

Change-Id: I5966aa25e7c81348f4ad4d6e7ce5d4dee44ea4c8
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/5049
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
src/target/target.c

index 28e67bf7544e37d9eb616786057382494b4f2522..14b6b0b99eac4920fb06c91e5025179b94ad8537 100644 (file)
@@ -4553,7 +4553,12 @@ void target_handle_event(struct target *target, enum target_event e)
 
                        if (Jim_EvalObj(teap->interp, teap->body) != JIM_OK) {
                                Jim_MakeErrorMessage(teap->interp);
-                               command_print(NULL, "%s\n", Jim_GetString(Jim_GetResult(teap->interp), NULL));
+                               LOG_USER("Error executing event %s on target %s:\n%s",
+                                                 Jim_Nvp_value2name_simple(nvp_target_event, e)->name,
+                                                 target_name(target),
+                                                 Jim_GetString(Jim_GetResult(teap->interp), NULL));
+                               /* clean both error code and stacktrace before return */
+                               Jim_Eval(teap->interp, "error \"\" \"\"");
                        }
 
                        cmd_ctx->current_target_override = saved_target_override;