diff --git a/controller.c b/controller.c index 1454fcacee87cbdc59fd621150ade5a8d5c4c1c4..1c32b19429d5dd0db363e1ff62d2568631ba9ae5 100644 --- a/controller.c +++ b/controller.c @@ -325,6 +325,9 @@ static void controller_loop_exit(struct controller *ctrl) if (!ctrl->event_loop) return; + if (ctrl->event_loop_stop) + ctrl->event_loop_stop(ctrl); + pthread_cancel(ctrl->thread); pthread_join(ctrl->thread, NULL); } diff --git a/controller.h b/controller.h index a7b5b588c8ff065867eeae5c187e509015132361..037552055880782f903f9f9ca76e00c6d7b0b30d 100644 --- a/controller.h +++ b/controller.h @@ -51,6 +51,7 @@ struct controller { int (*init) (struct controller * ctrl); void (*exit) (struct controller * ctrl); int (*event_loop) (struct controller * ctrl); + void (*event_loop_stop) (struct controller * ctrl); int (*interface_create) (struct interface * intf); void (*interface_destroy) (struct interface * intf);