From c485c51585d8e51d289eb9830203fa322d7a0740 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Fri, 8 Jan 2010 08:45:16 -0800 Subject: [PATCH] notmuch new: Don't prevent database upgrade from being interrupted. Our signal handler is designed to quickly flush out changes and then exit. But if a database upgrade is in progress when the user interrupts, then we just want to immediately abort. We could do something fancy like add a return value to our progress_notify function to allow it to tell the upgrade process to abort. But it's actually much cleaner and robust to delay the installation of our signal handler so that the default abort happens on SIGINT. --- notmuch-new.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/notmuch-new.c b/notmuch-new.c index 0d06253d..55c3dc1d 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -711,13 +711,6 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) } } - /* Setup our handler for SIGINT */ - memset (&action, 0, sizeof (struct sigaction)); - action.sa_handler = handle_sigint; - sigemptyset (&action.sa_mask); - action.sa_flags = SA_RESTART; - sigaction (SIGINT, &action, NULL); - config = notmuch_config_open (ctx, NULL, NULL); if (config == NULL) return 1; @@ -758,6 +751,15 @@ notmuch_new_command (void *ctx, int argc, char *argv[]) if (notmuch == NULL) return 1; + /* Setup our handler for SIGINT. We do this after having + * potentially done a database upgrade we this interrupt handler + * won't support. */ + memset (&action, 0, sizeof (struct sigaction)); + action.sa_handler = handle_sigint; + sigemptyset (&action.sa_mask); + action.sa_flags = SA_RESTART; + sigaction (SIGINT, &action, NULL); + talloc_free (dot_notmuch_path); dot_notmuch_path = NULL;