fix a few bugs with callback system, add some test signals

This commit is contained in:
jp9000 2013-12-27 05:08:58 -07:00
parent 6fcd5ce112
commit 261b9d7056
4 changed files with 44 additions and 7 deletions

View File

@ -20,6 +20,10 @@
#include "calldata.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
* Dynamic procedure handler
*
@ -43,3 +47,7 @@ EXPORT void proc_handler_add(proc_handler_t handler, const char *name,
*/
EXPORT bool proc_handler_call(proc_handler_t handler, const char *name,
calldata_t params);
#ifdef __cplusplus
}
#endif

View File

@ -39,7 +39,7 @@ static inline struct signal_info *signal_info_create(const char *name)
si->next = NULL;
da_init(si->callbacks);
if (!pthread_mutex_init(&si->mutex, NULL) != 0) {
if (pthread_mutex_init(&si->mutex, NULL) != 0) {
blog(LOG_ERROR, "Could not create signal!");
bfree(si->name);
bfree(si);
@ -179,6 +179,9 @@ void signal_handler_disconnect(signal_handler_t handler, const char *signal,
struct signal_info *sig = getsignal_locked(handler, signal);
size_t idx;
if (!sig)
return;
pthread_mutex_lock(&sig->mutex);
idx = signal_get_callback_idx(sig, callback, data);
@ -193,6 +196,9 @@ void signal_handler_signal(signal_handler_t handler, const char *signal,
{
struct signal_info *sig = getsignal_locked(handler, signal);
if (!sig)
return;
pthread_mutex_lock(&sig->mutex);
for (size_t i = 0; i < sig->callbacks.num; i++) {

View File

@ -20,6 +20,10 @@
#include "calldata.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
* Signal handler
*
@ -30,13 +34,18 @@
struct signal_handler;
typedef struct signal_handler *signal_handler_t;
signal_handler_t signal_handler_create(void);
void signal_handler_destroy(signal_handler_t handler);
EXPORT signal_handler_t signal_handler_create(void);
EXPORT void signal_handler_destroy(signal_handler_t handler);
void signal_handler_connect(signal_handler_t handler, const char *signal,
void (*callback)(calldata_t, void*), void *data);
void signal_handler_disconnect(signal_handler_t handler, const char *signal,
EXPORT void signal_handler_connect(signal_handler_t handler, const char *signal,
void (*callback)(calldata_t, void*), void *data);
EXPORT void signal_handler_disconnect(signal_handler_t handler,
const char *signal, void (*callback)(calldata_t, void*),
void *data);
void signal_handler_signal(signal_handler_t handler, const char *signal,
EXPORT void signal_handler_signal(signal_handler_t handler, const char *signal,
calldata_t params);
#ifdef __cplusplus
}
#endif

View File

@ -127,6 +127,17 @@ bool obs_source_init(struct obs_source *source, const char *settings,
return true;
}
static inline void obs_source_dosignal(struct obs_source *source,
const char *signal)
{
struct calldata data;
calldata_init(&data);
calldata_setptr(&data, "source", source);
signal_handler_signal(obs->signals, signal, &data);
calldata_free(&data);
}
obs_source_t obs_source_create(enum obs_source_type type, const char *id,
const char *name, const char *settings)
{
@ -165,6 +176,7 @@ obs_source_t obs_source_create(enum obs_source_type type, const char *id,
if (!obs_source_init(source, settings, info))
goto fail;
obs_source_create_dosignal(source, "source-create");
return source;
fail:
@ -177,6 +189,8 @@ static void obs_source_destroy(obs_source_t source)
{
size_t i;
obs_source_dosignal(source, "source-destroy");
if (source->filter_parent)
obs_source_filter_remove(source->filter_parent, source);