aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/bus/bus.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/charon/bus/bus.c')
-rw-r--r--src/charon/bus/bus.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/charon/bus/bus.c b/src/charon/bus/bus.c
index afed16656..740663d5c 100644
--- a/src/charon/bus/bus.c
+++ b/src/charon/bus/bus.c
@@ -180,7 +180,7 @@ static int get_thread_number(private_bus_t *this)
static void add_listener(private_bus_t *this, bus_listener_t *listener)
{
pthread_mutex_lock(&this->mutex);
- this->listeners->insert_last(this->listeners, (void*)listener);
+ this->listeners->insert_last(this->listeners, listener);
pthread_mutex_unlock(&this->mutex);
}
@@ -301,7 +301,12 @@ static void vsignal(private_bus_t *this, signal_t signal, level_t level,
va_list args_copy;
va_copy(args_copy, args);
- listener->signal(listener, signal, level, thread, ike_sa, format, args_copy);
+ if (!listener->signal(listener, signal, level, thread,
+ ike_sa, format, args_copy))
+ {
+ /* unregister listener if requested */
+ iterator->remove(iterator);
+ }
va_end(args_copy);
}
iterator->destroy(iterator);