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);