alter the hourly cleanup code in DXMsg to see whether that works better.
[spider.git] / perl / cluster.pl
index 6ed864b13578ce5bf175310b92351128110ef4bc..99322ff3f2c452ab49e9d31578cfec845a572672 100755 (executable)
@@ -61,6 +61,8 @@ use Filter;
 use DXDb;
 use AnnTalk;
 use WCY;
+use DXDupe;
+use BadWords;
 
 use Data::Dumper;
 use Fcntl ':flock'; 
@@ -71,7 +73,7 @@ package main;
 
 @inqueue = ();                                 # the main input queue, an array of hashes
 $systime = 0;                                  # the time now (in seconds)
-$version = "1.43";                             # the version no of the software
+$version = "1.45";                             # 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
@@ -219,6 +221,7 @@ sub cease
        Msg->event_loop(1, 0.05);
        Msg->event_loop(1, 0.05);
        DXUser::finish();
+       DXDupe::finish();
 
        # close all databases
        DXDb::closeall;
@@ -253,11 +256,6 @@ sub process_inqueue
        my ($sort, $call, $line) = DXChannel::decode_input($dxchan, $data);
        return unless defined $sort;
        
-       # translate any crappy characters into hex characters 
-       if ($line =~ /[\x00-\x06\x08\x0a-\x1f\x7f-\xff]/o) {
-               $line =~ s/([\x00-\x1f\x7f-\xff])/uc sprintf("%%%02x",ord($1))/eg;
-       }
-
        # do the really sexy console interface bit! (Who is going to do the TK interface then?)
        dbg('chan', "<- $sort $call $line\n") unless $sort eq 'D';
 
@@ -326,18 +324,30 @@ DXUser->init($userfn, 1);
 dbg('err', "starting listener ...");
 Msg->new_server("$clusteraddr", $clusterport, \&login);
 
+# load bad words
+dbg('err', "load badwords: " . (BadWords::load or "Ok"));
+
 # 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{ILL} = $SIG{FPE} = 
-       $SIG{SEGV} = $SIG{USR1} = $SIG{USR2} =
-       $SIG{BUS} = sub { my $sig = shift;      DXDebug::confess("Caught signal $sig");  };
+$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");  }; 
+       }
+}
 
+# start dupe system
+DXDupe::init();
 
 # read in system messages
 DXM->init();
@@ -409,6 +419,8 @@ for (;;) {
                DXMsg::process();
                DXDb::process();
                DXUser::process();
+               DXDupe::process();
+               
                eval { 
                        Local::process();       # do any localised processing
                };