Roxen.git / server / base_server / roxen.pike

version» Context lines:

Roxen.git/server/base_server/roxen.pike:513:   {    if(shutdown_recurse >= 4)    {    if (mixed err =    catch (report_notice("Exiting roxen (spurious signals received).\n")) ||    catch (stop_all_configurations()))    master()->handle_error (err);    // Zap some of the remaining caches.    destruct(argcache);    destruct(cache); -  stop_error_log_cleaner(); +  stop_hourly_maintenance();   #ifdef THREADS   #if constant(Filesystem.Monitor.basic)    stop_fsgarb();   #endif    if (mixed err = catch (stop_handler_threads()))    master()->handle_error (err);   #endif /* THREADS */    roxenloader.real_exit(exit_code);    }    if (shutdown_recurse++) return;
Roxen.git/server/base_server/roxen.pike:3219:    if( conf )    {    if( conf->error_log )    conf->error_log[log_index] += ({ log_time });    }       if(errtype >= 1)    report_debug( s );   }    - protected BackgroundProcess error_log_cleaner_process; + protected BackgroundProcess hourly_maintenance_process;      protected void clean_error_log(mapping(string:array(int)) log,    mapping(string:int) cutoffs)   {    if (!log || !sizeof(log)) return;    foreach(cutoffs; string prefix; int cutoff) {    foreach(log; string key; array(int) times) {    if (!has_prefix(key, prefix)) continue;    int sz = sizeof(times);    times = filter(times, `>=, cutoff);
Roxen.git/server/base_server/roxen.pike:3261:    // Then all configurations and modules.    foreach(configurations, Configuration conf) {    clean_error_log(conf->error_log, cutoffs);       foreach(indices(conf->otomod), RoxenModule mod) {    clean_error_log(mod->error_log, cutoffs);    }    }   }    - protected void start_error_log_cleaner() + protected void hourly_maintenance()   { -  if (error_log_cleaner_process) return; +  error_log_cleaner(); + }    -  // Clean the error log once every hour. -  error_log_cleaner_process = BackgroundProcess(3600, error_log_cleaner); + protected void start_hourly_maintenance() + { +  if (hourly_maintenance_process) return; +  +  // Start a background process that performs maintenance tasks every hour +  // (eg cleaning the error log). +  hourly_maintenance_process = BackgroundProcess(3600, hourly_maintenance);   }    - protected void stop_error_log_cleaner() + protected void stop_hourly_maintenance()   { -  if (error_log_cleaner_process) { -  error_log_cleaner_process->stop(); -  error_log_cleaner_process = UNDEFINED; +  if (hourly_maintenance_process) { +  hourly_maintenance_process->stop(); +  hourly_maintenance_process = UNDEFINED;    }   }      // When was Roxen started?   int boot_time =time();   int start_time =time();      string version()   {   #ifndef NSERIOUS
Roxen.git/server/base_server/roxen.pike:6160:    c->enable_all_modules();   #endif // RUN_SELF_TEST      #ifdef THREADS    start_handler_threads();   #if constant(Filesystem.Monitor.basic)    start_fsgarb();   #endif   #endif /* THREADS */    -  start_error_log_cleaner(); +  start_hourly_maintenance();      #ifdef TEST_EUID_CHANGE    if (test_euid_change) {    Stdio.File f = Stdio.File();    if (f->open ("rootonly", "r") && f->read())    werror ("Backend thread can read rootonly\n");    else    werror ("Backend thread can't read rootonly\n");    }   #endif