Browse Source

libobs: Don't call signal handlers that got removed

It's possible for one signal handler to disconnect another during signal_handler_signal, which could result in crashes when the disconnected signal handler is called with a potentially freed data pointer due to other cleanup.
Richard Stanway 10 years ago
parent
commit
90a45a0ca0
1 changed files with 2 additions and 1 deletions
  1. 2 1
      libobs/callback/signal.c

+ 2 - 1
libobs/callback/signal.c

@@ -253,7 +253,8 @@ 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;
-		cb->callback(cb->data, params);
+		if (!cb->remove)
+			cb->callback(cb->data, params);
 	}
 
 	for (size_t i = sig->callbacks.num; i > 0; i--) {