diff options
author | Tuomas Taipale <tuomas.taipale@nokia.com> | 2023-06-05 09:47:28 +0000 |
---|---|---|
committer | Petri Savolainen <petri.savolainen@nokia.com> | 2023-06-09 11:31:12 +0300 |
commit | 5cfbf7b26a44cbd180dd2789b2ffd1c75e490b37 (patch) | |
tree | 9c392d6811dc99bd957376b561058ab0deadca07 /platform | |
parent | 08ecf97be28c29670e59f946b1c79c3a6a4a993f (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.c | 20 |
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; |