+ pcntl_signal(SIGINT, 'task_sigint_handler');
+
+ register_shutdown_function('task_shutdown');
+
+ $my_pid = posix_getpid();
+ $lock_filename = "update_daemon-$my_pid.lock";
+
+ $lock_handle = make_lockfile($lock_filename);
+
+ if (!$lock_handle) {
+ die("error: Can't create lockfile ($lock_filename). ".
+ "Maybe another daemon is already running.\n");
+ }
+
+ // ****** Updating RSS code *******
+ // Only run in fork process.
+
+ $start_timestamp = time();
+
+ $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
+
+ if (!init_connection($link)) return;
+
+ // We disable stamp file, since it is of no use in a multiprocess update.
+ // not really, tho for the time being -fox
+ if (!make_stampfile('update_daemon.stamp')) {
+ _debug("warning: unable to create stampfile\n");
+ }
+
+ // Call to the feed batch update function
+ // and maybe regenerate feedbrowser cache
+
+ $nf = 0;
+
+ _debug("Waiting before update [$j]..");
+ sleep($j*5);
+ $nf = update_daemon_common($link);
+
+ if (rand(0,100) > 50) {
+ $count = update_feedbrowser_cache($link);
+ _debug("Feedbrowser updated, $count feeds processed.");
+
+ purge_orphans($link, true);
+
+ $rc = cleanup_tags($link, 14, 50000);
+
+ _debug("Cleaned $rc cached tags.");
+
+ global $pluginhost;
+ $pluginhost->run_hooks($pluginhost::HOOK_UPDATE_TASK, "hook_update_task", $op);
+ }
+
+ _debug("Elapsed time: " . (time() - $start_timestamp) . " second(s)");
+
+ if ($nf > 0) {
+ _debug("Feeds processed: $nf");
+
+ if (time() - $start_timestamp > 0) {
+ _debug("Feeds/minute: " . sprintf("%.2d", $nf/((time()-$start_timestamp)/60)));
+ }
+ }
+
+ db_close($link);
+
+ // We are in a fork.
+ // We wait a little before exiting to avoid to be faster than our parent process.
+ sleep(1);
+
+ unlink(LOCK_DIRECTORY . "/$lock_filename");
+
+ // We exit in order to avoid fork bombing.