From cbaad3ed4b3484d3bcd9a95110d322fe10bb8270 Mon Sep 17 00:00:00 2001 From: Wojciech Zajac Date: Wed, 18 Jun 2014 12:17:01 +0200 Subject: [PATCH] Graceful exiting for USBD --- drivers/usbd/base/usbd.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/usbd/base/usbd.c b/drivers/usbd/base/usbd.c index 1925a5269..f45929cba 100755 --- a/drivers/usbd/base/usbd.c +++ b/drivers/usbd/base/usbd.c @@ -18,12 +18,14 @@ * Local declarations * *===========================================================================*/ static int usbd_sef_handler(int, sef_init_info_t *); +static void usbd_signal_handler(int); static int usbd_start(void); static void usbd_init(void); static void usbd_server_thread(void *); /* TODO: No headers for these... */ -extern void ddekit_minix_wait_exit(void); /* dde.c */ +extern void ddekit_minix_wait_exit(void); /* dde.c */ +extern void ddekit_shutdown(void); /* dde.c */ /*===========================================================================* @@ -94,6 +96,24 @@ usbd_sef_handler(int type, sef_init_info_t * UNUSED(info)) } +/*===========================================================================* + * usbd_signal_handler * + *===========================================================================*/ +static void +usbd_signal_handler(int UNUSED(signo)) +{ + DEBUG_DUMP; + + USB_MSG("Signal received, exiting USBD..."); + + /* Try graceful DDEKit exit */ + ddekit_shutdown(); + + /* Unreachable, when ddekit_shutdown works correctly */ + USB_ASSERT(0, "Calling ddekit_shutdown failed!"); +} + + /*===========================================================================* * usbd_start * *===========================================================================*/ @@ -133,6 +153,7 @@ usbd_init(void) sef_setcb_init_fresh(usbd_sef_handler); sef_setcb_init_lu(usbd_sef_handler); sef_setcb_init_restart(usbd_sef_handler); + sef_setcb_signal_handler(usbd_signal_handler); /* Initialize DDEkit (involves sef_startup()) */ ddekit_init(); -- 2.44.0