libobs/callback: Add signal reference counting

Adds a simple signal reference counting function
(signal_handler_connect_ref) that makes it so that signals keep the
handler around until the all the signal itself is disconnected.  This
prevents potential crashes where a signal might try to disconnect after
a handler has already been destroyed (typically in C++ with
OBSSignalHandler helper objects, where destruction isn't guaranteed to
be predictable).

This also modifies OBSSignalHandler to use the reference-counting
connections.
This commit is contained in:
jp9000
2018-03-09 19:31:30 -08:00
parent 10fc206f98
commit 3a05cf6ab0
4 changed files with 77 additions and 21 deletions

View File

@@ -196,6 +196,18 @@ Signals are used for all event-based callbacks.
---------------------
.. function:: void signal_handler_connect_ref(signal_handler_t *handler, const char *signal, signal_callback_t callback, void *data)
Connect a callback to a signal on a signal handler, and increments
the handler's internal reference counter, preventing it from being
destroyed until the signal has been disconnected.
:param handler: Signal handler object
:param callback: Signal callback
:param data: Private data passed the callback
---------------------
.. function:: void signal_handler_disconnect(signal_handler_t *handler, const char *signal, signal_callback_t callback, void *data)
Disconnects a callback from a signal on a signal handler.