summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/rv/da_monitor.h4
-rw-r--r--include/rv/ltl_monitor.h1
2 files changed, 5 insertions, 0 deletions
diff --git a/include/rv/da_monitor.h b/include/rv/da_monitor.h
index 1459fb3dfee6..cc97cc5dfbfd 100644
--- a/include/rv/da_monitor.h
+++ b/include/rv/da_monitor.h
@@ -302,6 +302,9 @@ static int da_monitor_init(void)
/*
* da_monitor_destroy - return the allocated slot
+ *
+ * Wait for all in-flight handlers before returning the slot to avoid
+ * out-of-bound accesses.
*/
static inline void da_monitor_destroy(void)
{
@@ -310,6 +313,7 @@ static inline void da_monitor_destroy(void)
return;
}
+ tracepoint_synchronize_unregister();
da_monitor_reset_all();
rv_put_task_monitor_slot(task_mon_slot);
diff --git a/include/rv/ltl_monitor.h b/include/rv/ltl_monitor.h
index eff60cd61106..38e792401f76 100644
--- a/include/rv/ltl_monitor.h
+++ b/include/rv/ltl_monitor.h
@@ -77,6 +77,7 @@ static void ltl_monitor_destroy(void)
{
rv_detach_trace_probe(name, task_newtask, handle_task_newtask);
+ tracepoint_synchronize_unregister();
rv_put_task_monitor_slot(ltl_monitor_slot);
ltl_monitor_slot = RV_PER_TASK_MONITOR_INIT;
}