mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-19 17:49:14 +00:00
libobs/callback: Add signal_handler_remove_current func
Convenience function that allows removing the current signal handler callback within the callback without having to use signal_handler_disconnect with all of its required parameters.
This commit is contained in:
parent
b56c33a260
commit
b8bb60c83b
|
@ -236,10 +236,18 @@ void signal_handler_disconnect(signal_handler_t *handler, const char *signal,
|
|||
else
|
||||
da_erase(sig->callbacks, idx);
|
||||
}
|
||||
|
||||
|
||||
pthread_mutex_unlock(&sig->mutex);
|
||||
}
|
||||
|
||||
static THREAD_LOCAL struct signal_callback *current_signal_cb = NULL;
|
||||
|
||||
void signal_handler_remove_current(void)
|
||||
{
|
||||
if (current_signal_cb)
|
||||
current_signal_cb->remove = true;
|
||||
}
|
||||
|
||||
void signal_handler_signal(signal_handler_t *handler, const char *signal,
|
||||
calldata_t *params)
|
||||
{
|
||||
|
@ -253,8 +261,11 @@ void signal_handler_signal(signal_handler_t *handler, const char *signal,
|
|||
|
||||
for (size_t i = 0; i < sig->callbacks.num; i++) {
|
||||
struct signal_callback *cb = sig->callbacks.array+i;
|
||||
if (!cb->remove)
|
||||
if (!cb->remove) {
|
||||
current_signal_cb = cb;
|
||||
cb->callback(cb->data, params);
|
||||
current_signal_cb = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t i = sig->callbacks.num; i > 0; i--) {
|
||||
|
|
|
@ -60,6 +60,8 @@ EXPORT void signal_handler_connect(signal_handler_t *handler,
|
|||
EXPORT void signal_handler_disconnect(signal_handler_t *handler,
|
||||
const char *signal, signal_callback_t callback, void *data);
|
||||
|
||||
EXPORT void signal_handler_remove_current(void);
|
||||
|
||||
EXPORT void signal_handler_signal(signal_handler_t *handler, const char *signal,
|
||||
calldata_t *params);
|
||||
|
||||
|
|
Loading…
Reference in a new issue