From: George Talusan Date: Tue, 23 Feb 2016 01:07:43 +0000 (-0500) Subject: make st-flash clean up on sigint/term/segv, make gdb-server clean up on sigsegv. X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=09a81132776d0be0ae563a31929eb2f33d68e8bd;p=fw%2Fstlink make st-flash clean up on sigint/term/segv, make gdb-server clean up on sigsegv. --- diff --git a/flash/main.c b/flash/main.c index d0d303a..284068c 100644 --- a/flash/main.c +++ b/flash/main.c @@ -3,6 +3,7 @@ // TODO - this should be done as just a simple flag to the st-util command line... +#include #include #include #include @@ -12,6 +13,19 @@ #define DEBUG_LOG_LEVEL 100 #define STND_LOG_LEVEL 50 +stlink_t *connected_stlink = NULL; + +static void cleanup(int signal __attribute__((unused))) { + if (connected_stlink) { + /* Switch back to mass storage mode before closing. */ + stlink_run(connected_stlink); + stlink_exit_debug_mode(connected_stlink); + stlink_close(connected_stlink); + } + + exit(1); +} + enum st_cmds {DO_WRITE = 0, DO_READ = 1, DO_ERASE = 2}; struct opts { @@ -174,6 +188,11 @@ int main(int ac, char** av) sl->verbose = o.log_level; } + connected_stlink = sl; + signal(SIGINT, &cleanup); + signal(SIGTERM, &cleanup); + signal(SIGSEGV, &cleanup); + if (stlink_current_mode(sl) == STLINK_DEV_DFU_MODE) stlink_exit_dfu_mode(sl); diff --git a/gdbserver/gdb-server.c b/gdbserver/gdb-server.c index b272f4c..0c31cff 100644 --- a/gdbserver/gdb-server.c +++ b/gdbserver/gdb-server.c @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #ifdef __MINGW32__ @@ -186,6 +185,7 @@ int main(int argc, char** argv) { connected_stlink = sl; signal(SIGINT, &cleanup); signal(SIGTERM, &cleanup); + signal(SIGSEGV, &cleanup); if (state.reset) { stlink_reset(sl);