diff options
author | ehmry <ehmry@posteo.net> | 2022-10-31 13:24:57 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-31 19:24:57 +0100 |
commit | 0b262e9496387d5e8adc0c5f6020b3f3300e8f79 (patch) | |
tree | 62e973c59dddf9b28df2c1a05847bac3e7677f85 /lib/genode_cpp | |
parent | 39f925b95d57a429a808cfa1b96d6fae12a72dbf (diff) | |
download | Nim-0b262e9496387d5e8adc0c5f6020b3f3300e8f79.tar.gz |
Genode: add scheduleCallbacks to asyncdispatch (#20708)
* Genode: add native signal handler * Genode: add scheduleCallbacks to asyncdispatch This resolves some awkwardness where an RPC server may or may not use callSoon while dispatching RPC but without scheduling timers or I/O.
Diffstat (limited to 'lib/genode_cpp')
-rw-r--r-- | lib/genode_cpp/signals.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/genode_cpp/signals.h b/lib/genode_cpp/signals.h new file mode 100644 index 000000000..fa3975d38 --- /dev/null +++ b/lib/genode_cpp/signals.h @@ -0,0 +1,39 @@ +/* + * + * Nim's Runtime Library + * (c) Copyright 2022 Emery Hemingway + * + * See the file "copying.txt", included in this + * distribution, for details about the copyright. + * + */ + +#ifndef _NIM_SIGNALS_H_ +#define _NIM_SIGNALS_H_ + +#include <libc/component.h> +#include <base/signal.h> +#include <util/reconstructible.h> + +// Symbol for calling back into Nim +extern "C" void nimHandleSignal(void *arg); + +namespace Nim { struct SignalHandler; } + +struct Nim::SignalHandler +{ + // Pointer to the Nim handler object. + void *arg; + + void handle_signal() { + Libc::with_libc([this] () { nimHandleSignal(arg); }); } + + Genode::Signal_handler<SignalHandler> handler; + + SignalHandler(Genode::Entrypoint *ep, void *arg) + : arg(arg), handler(*ep, *this, &SignalHandler::handle_signal) { } + + Genode::Signal_context_capability cap() { return handler; } +}; + +#endif |