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:
jp9000 2017-12-25 12:05:54 -08:00
parent b56c33a260
commit b8bb60c83b
2 changed files with 15 additions and 2 deletions

View file

@ -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--) {

View file

@ -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);