Index: trunk/Ohana/src/opihi/dvo/mmextract.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/mmextract.c	(revision 38471)
+++ trunk/Ohana/src/opihi/dvo/mmextract.c	(revision 39457)
@@ -6,10 +6,9 @@
   off_t i, j, k, m;
   int n, N, Npts, NPTS, last, next, state;
-  int Nfields, Nreturn, Nreturn_base, Ncstack1, Ncstack2, Nstack1, Nstack2;
+  int Nfields, Nreturn, Nreturn_base, Nstack1, Nstack2;
   int Nwhere, Iwhere, Nmatch, Imatch, NTABLE, Nt1, Nt2, n1, n2;
   int Nsecfilt, VERBOSE, loadImages;
   char **cstack1, **cstack2, name1[1024], name2[1024];
   dbValue *values, **table1, **table2;
-  void *Signal;
 
   Catalog catalog;
@@ -102,4 +101,5 @@
 
   // parse the 'where' and 'matched to' segments of the line as boolean math expressions
+  unsigned int Ncstack1, Ncstack2;
   cstack1 = isolate_elements (Nwhere, &argv[Iwhere], &Ncstack1);
   cstack2 = isolate_elements (Nmatch, &argv[Imatch], &Ncstack2);
@@ -178,6 +178,6 @@
 
   // grab data from all selected sky regions
-  Signal = signal (SIGINT, handle_interrupt);
-  interrupt = FALSE;
+  struct sigaction *old_sigaction = SetInterrupt();
+
   for (i = 0; (i < skylist[0].Nregions) && !interrupt; i++) {
     /* lock, load, unlock catalog */
@@ -286,6 +286,5 @@
     // dbStackFreeReset ();
   }
-  signal (SIGINT, Signal);
-  interrupt = FALSE;
+  ClearInterrupt (old_sigaction);
 
   // free excess memory
