Author: mturk
Date: Mon Sep  6 08:10:26 2010
New Revision: 992966

URL: http://svn.apache.org/viewvc?rev=992966&view=rev
Log:
DAEMON-95 Patch provided by Mike Polek and Damien Raude-Morvan

Modified:
    commons/proper/daemon/trunk/RELEASE-NOTES.txt
    commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c

Modified: commons/proper/daemon/trunk/RELEASE-NOTES.txt
URL: 
http://svn.apache.org/viewvc/commons/proper/daemon/trunk/RELEASE-NOTES.txt?rev=992966&r1=992965&r2=992966&view=diff
==============================================================================
--- commons/proper/daemon/trunk/RELEASE-NOTES.txt (original)
+++ commons/proper/daemon/trunk/RELEASE-NOTES.txt Mon Sep  6 08:10:26 2010
@@ -15,6 +15,7 @@ follow the release early/release often m
 
 NEW FEATURES:
 
+* DAEMON-95:  Support log ration using SIGUSR1 (1.0.4)
 * DAEMON-138: Add --PidFile option to allow storing running process id. (1.0.3)
 * DAEMON-137: Add --LogJniMessages allowing to configure JNI verbose message
               logging. By default those messages were always logged. (1.0.3)
@@ -41,7 +42,7 @@ NEW FEATURES:
 
 BUG FIXES:
 
-1.0.4:
+1.0.4: DAEMON-95
 
 1.0.3: DAEMON-108, DAEMON-128, DAEMON-139, DAEMON-143, DAEMON-148,
        DAEMON-135, DAEMON-155, DAEMON-159, DAEMON-161, DAEMON-145, DAEMON-146,

Modified: commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c
URL: 
http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c?rev=992966&r1=992965&r2=992966&view=diff
==============================================================================
--- commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c (original)
+++ commons/proper/daemon/trunk/src/native/unix/native/jsvc-unix.c Mon Sep  6 
08:10:26 2010
@@ -54,13 +54,17 @@ pid_t controlled = 0;           /* the c
 pid_t logger_pid = 0;           /* the logger process pid */
 static bool stopping = false;
 static bool doreload = false;
+static bool doreopen = false;
 typedef void (*sighandler_t)(int);
-static sighandler_t handler_int = NULL;
-static sighandler_t handler_hup = NULL;
-static sighandler_t handler_trm = NULL;
+static sighandler_t handler_int  = NULL;
+static sighandler_t handler_usr1 = NULL;
+static sighandler_t handler_hup  = NULL;
+static sighandler_t handler_trm  = NULL;
 
 static int run_controller(arg_data *args, home_data *data, uid_t uid,
                           gid_t gid);
+static void set_output(char *outfile, char *errfile, bool redirectstdin,
+                       char *procname);
 
 #ifdef OS_CYGWIN
 /*
@@ -120,6 +124,10 @@ static void handler(int sig)
                 doreload = true;
             }
         break;
+        case SIGUSR1:
+             log_debug("Caught SIGUSR1: Reopening logs");
+             doreopen = true;
+        break;
         default:
             log_debug("Caught unknown signal %d", sig);
         break;
@@ -360,6 +368,7 @@ static void controller(int sig)
         case SIGTERM:
         case SIGINT:
         case SIGHUP:
+        case SIGUSR1:
             log_debug("Forwarding signal %d to process %d", sig, controlled);
             kill(controlled, sig);
             signal(sig, controller);
@@ -694,6 +703,7 @@ static int child(arg_data *args, home_da
 
     /* Install signal handlers */
     handler_hup = signal_set(SIGHUP, handler);
+    handler_usr1 = signal_set(SIGUSR1, handler);
     handler_trm = signal_set(SIGTERM, handler);
     handler_int = signal_set(SIGINT, handler);
     controlled = getpid();
@@ -708,6 +718,10 @@ static int child(arg_data *args, home_da
         /* pause() is not threadsafe */
         sleep(60);
 #endif
+        if(doreopen) {
+            doreopen = false;
+            set_output(args->outfile, args->errfile, args->redirectstdin, 
args->procname);
+        }
     }
     remove_tmp_file(args);
     log_debug("Shutdown or reload requested: exiting");
@@ -1029,6 +1043,7 @@ static int run_controller(arg_data *args
         SetTerm(cygwincontroller);
 #endif
         signal(SIGHUP, controller);
+        signal(SIGUSR1, controller);
         signal(SIGTERM, controller);
         signal(SIGINT, controller);
 


Reply via email to