notmuch new: Don't prevent database upgrade from being interrupted.
authorCarl Worth <cworth@cworth.org>
Fri, 8 Jan 2010 16:45:16 +0000 (08:45 -0800)
committerCarl Worth <cworth@cworth.org>
Fri, 8 Jan 2010 16:45:16 +0000 (08:45 -0800)
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

index 0d06253d9fb5221949ce6da83ac3d97d58ee4f0e..55c3dc1d8d75c8873fb64308d2e72b5d63cb661e 100644 (file)
@@ -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;