mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-10-17 19:05:07 +00:00
47 lines
1.6 KiB
C
47 lines
1.6 KiB
C
// SPDX-License-Identifier: Apache-2.0
|
|
#pragma once
|
|
|
|
#include "instance.h"
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include <tactility/error.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* Sends a POSIX signal to an app instance. A signal's pid is its AppInstanceId.
|
|
*
|
|
* An app with an event subscription (app/event.h) receives the signal as an AppEvent: SIGTERM as
|
|
* APP_EVENT_CLOSE, any other signal as APP_EVENT_SIGNAL. Its signal() handlers are not used.
|
|
*
|
|
* Any other app gets the signal queued, and delivered on its own task at its next libc call (see
|
|
* app_signal_deliver_pending()). A blocking read, write, poll or sleep it is waiting in returns -1
|
|
* with errno EINTR within about 100 ms.
|
|
* A signal the app ignores is discarded right away.
|
|
*
|
|
* @param[in] sig 1 to APP_LIBC_SIGNAL_COUNT - 1 (app/libc.h)
|
|
* @retval ERROR_NONE the signal was sent or discarded
|
|
* @retval ERROR_INVALID_ARGUMENT @a sig is out of range
|
|
* @retval ERROR_NOT_FOUND no such app instance
|
|
* @retval ERROR_RESOURCE an event queue of the app was full
|
|
*/
|
|
error_t app_signal_send(AppInstanceId app_instance_id, int sig);
|
|
|
|
/** @return true when the calling app instance has a signal that was not yet delivered */
|
|
bool app_signal_is_pending(void);
|
|
|
|
/**
|
|
* Delivers the calling app instance's pending signals: calls signal() handlers, and ends the app
|
|
* (as exit(128 + sig)) for a signal without a handler whose default action terminates.
|
|
* Does nothing outside an app task.
|
|
* @warning Only call where the app holds no lock of the system itself, e.g. at the entry of a libc wrap.
|
|
*/
|
|
void app_signal_deliver_pending(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|