try again
[spider.git] / perl / cluster.pl
index 4da018b0bfd25b8d6b2d55e407288a923acffc62..6cdd417d16ccf2b4cfabf8fcf7fed20ca6a5e907 100755 (executable)
@@ -71,7 +71,7 @@ package main;
 
 @inqueue = ();                                 # the main input queue, an array of hashes
 $systime = 0;                                  # the time now (in seconds)
-$version = "1.42";                             # the version no of the software
+$version = "1.43";                             # the version no of the software
 $starttime = 0;                 # the starting time of the cluster   
 $lockfn = "cluster.lock";       # lock file name
 @outstanding_connects = ();     # list of outstanding connects
@@ -188,6 +188,8 @@ sub cease
        $SIG{'TERM'} = 'IGNORE';
        $SIG{'INT'} = 'IGNORE';
        
+       DXUser::sync;
+
        eval {
                Local::finish();   # end local processing
        };
@@ -325,10 +327,23 @@ dbg('err', "starting listener ...");
 Msg->new_server("$clusteraddr", $clusterport, \&login);
 
 # prime some signals
-$SIG{'INT'} = \&cease;
-$SIG{'TERM'} = \&cease;
-$SIG{'HUP'} = 'IGNORE';
-$SIG{'CHLD'} = \&reap;
+$SIG{INT} = \&cease;
+$SIG{TERM} = \&cease;
+$SIG{HUP} = 'IGNORE';
+$SIG{CHLD} = \&reap;
+
+$SIG{PIPE} = sub {     dbg('err', "Broken PIPE signal received"); };
+$SIG{IO} = sub {       dbg('err', "SIGIO received"); };
+$SIG{WINCH} = $SIG{STOP} = $SIG{CONT} = 'IGNORE';
+$SIG{KILL} = 'DEFAULT';     # as if it matters....
+
+# catch the rest with a hopeful message
+for (keys %SIG) {
+       if (!$SIG{$_}) {
+               dbg('chan', "Catching SIG $_");
+               $SIG{$_} = sub { my $sig = shift;       DXDebug::confess("Caught signal $sig");  }; 
+       }
+}
 
 # read in system messages
 DXM->init();
@@ -379,11 +394,6 @@ dbg('err', "orft we jolly well go ...");
 
 #open(DB::OUT, "|tee /tmp/aa");
 
-$SIG{PIPE} = sub { 
-       #$DB::single = 1;  
-       dbg('err', "Broken PIPE signal received"); 
-};
-
 for (;;) {
        my $timenow;
 #      $DB::trace = 1;
@@ -404,6 +414,7 @@ for (;;) {
                DXConnect::process();
                DXMsg::process();
                DXDb::process();
+               DXUser::process();
                eval { 
                        Local::process();       # do any localised processing
                };