aboutsummaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorTuomas Taipale <tuomas.taipale@nokia.com>2023-06-05 09:47:28 +0000
committerPetri Savolainen <petri.savolainen@nokia.com>2023-06-09 11:31:12 +0300
commit5cfbf7b26a44cbd180dd2789b2ffd1c75e490b37 (patch)
tree9c392d6811dc99bd957376b561058ab0deadca07 /platform
parent08ecf97be28c29670e59f946b1c79c3a6a4a993f (diff)
linux-gen: init: implement odp_term_abnormal()
Implement the new `odp_term_abnormal()` function. Normal ODP termination procedure is attempted in non-signal-handler context. Signed-off-by: Tuomas Taipale <tuomas.taipale@nokia.com> Reviewed-by: Petri Savolainen <petri.savolainen@nokia.com>
Diffstat (limited to 'platform')
-rw-r--r--platform/linux-generic/odp_init.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/platform/linux-generic/odp_init.c b/platform/linux-generic/odp_init.c
index bd27641aa..f1aae95bb 100644
--- a/platform/linux-generic/odp_init.c
+++ b/platform/linux-generic/odp_init.c
@@ -692,6 +692,26 @@ int odp_term_local(void)
return term_local(ALL_INIT);
}
+int odp_term_abnormal(odp_instance_t instance, uint64_t flags, void *data ODP_UNUSED)
+{
+ if (flags & ODP_TERM_FROM_SIGH)
+ /* Called from signal handler, not safe to terminate with local/global,
+ * return with failure as not able to perform all actions */
+ return -1;
+
+ if (odp_term_local() < 0) {
+ _ODP_ERR("ODP local terminate failed.\n");
+ return -2;
+ }
+
+ if (odp_term_global(instance) < 0) {
+ _ODP_ERR("ODP global terminate failed.\n");
+ return -3;
+ }
+
+ return 0;
+}
+
void odp_log_thread_fn_set(odp_log_func_t func)
{
_odp_this_thread->log_fn = func;