&StartWorkers();
}
+#
+## ReloadIgnoreList function.
+#
+## This function will be called if the signal handler recieves a "SIGUSR1" signal,
+## or the reload-ignore-list command will be sent via the socket connection. It just
+## performs a simple check if an ignore file has been configured and calls the responsible
+## function on the events module.
+#
+sub ReloadIgnoreList () {
+ # Update ignore list, if an ignorefile has been specified.
+ if (exists($mainsettings{IgnoreFile})) {
+ # Log reload of the ignore list.
+ $logger->Log("info", "Reloading ignore list...");
+
+ # Call responsible function from the events module.
+ &Guardian::Events::GenerateIgnoreList($mainsettings{IgnoreFile});
+ }
+}
+
+ #
+ ## Logrotate function.
+ #
+ ## This function only get called when the logrotate command will be sent via
+ ## the socket connection. It is responsible for validating and altering the current
+ ## curser positions of the monitored files and stopping/starting the worker threads.
+ #
+ sub Logrotate () {
+ # Stop all running workers.
+ &StopWorkers();
+
+ {
+ # Lock shared hash.
+ lock(%file_positions);
+
+ # Loop through the hash which contains the current
+ # file positions.
+ foreach my $file (keys(%file_positions)) {
+ # Obtain stored value from hash.
+ my $stored_position = $file_positions{$file};
+
+ # Call function to get the current position.
+ my $current_position = &Guardian::Base::GetFileposition($file);
+
+ # Compare if the current position still matches
+ # the stored one.
+ if ($current_position ne $stored_position) {
+ # Update to the new position, because
+ # they has changed during file rotation.
+ $file_positions{$file} = $current_position;
+
+ # Log notice about rotated file.
+ $logger->Log("debug", "$file have been rotated - Using new file position.");
+ }
+ }
+
+ # After this bracket, the lock of the hash will be released.
+ }
+
+ # Restart all worker threads.
+ &StartWorkers();
+ }
+
#
## Shutdown function.
#