Author: fapeeler
Date: Wed Jul 14 20:30:19 2010
New Revision: 964187

URL: http://svn.apache.org/viewvc?rev=964187&view=rev
Log:
VCL-149

added semaphore lock on /var/lock/subsys/vcld file in the daemonize routine
if a running vcld process is active and attempts to start a second process will 
not succeed

Modified:
    incubator/vcl/trunk/managementnode/bin/vcld

Modified: incubator/vcl/trunk/managementnode/bin/vcld
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/bin/vcld?rev=964187&r1=964186&r2=964187&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/bin/vcld (original)
+++ incubator/vcl/trunk/managementnode/bin/vcld Wed Jul 14 20:30:19 2010
@@ -774,16 +774,34 @@ sub daemonize {
        chdir '/' or die "Can't chdir to /: $!";
        defined(my $pid = fork) or die "Can't fork $!";
        exit if $pid;
-       print "Created VCL daemon process: $$\n";
-       setsid or die "Can't start a new session: $!";
-       open STDIN,  '/dev/null'  or die "Can't read /dev/null $!";
-       open STDOUT, ">>$LOGFILE" or die "Can't write $LOGFILE $!";
-       open STDERR, ">>$LOGFILE" or die "Can't write $LOGFILE $!";
-       setsid or die "Can't start a new session: $!";
-       umask 0;
-       open(PIDFILE, ">" . $PIDFILE) or notify($ERRORS{'WARNING'}, $LOGFILE, 
"unable to open PID file: $PIDFILE, $!");    # so I can kill myself easily
-       print PIDFILE $$;
-       close(PIDFILE);
+       
+       #Create EX lock on lockfile
+        my $subsys_lock = "/var/lock/subsys/$PROCESSNAME";
+        sysopen(LOCKFILE, $subsys_lock, O_RDONLY | O_CREAT ) or die "unable to 
open lock file: $PIDFILE \n";
+
+        unless(flock(LOCKFILE, LOCK_EX|LOCK_NB)){
+               #write to log file
+                notify($ERRORS{'WARNING'}, $LOGFILE, " An process instance of 
$PROCESSNAME is already running ");
+               # print to STDERR
+                print STDERR "\nFailed to start.\n\nAn instance of 
$PROCESSNAME is already running\n\n";
+                exit;
+        }
+
+        umask 0;
+        setsid or die "Can't start a new session: $!";
+
+        # write pid to pidfile
+        open(PIDFILE, ">" . $PIDFILE) or notify($ERRORS{'WARNING'}, $LOGFILE, 
"unable to open PID file: $PIDFILE, $!");
+        print PIDFILE $$ ;
+        close(PIDFILE);
+
+        #Redirect STDIN,STDOUT,STDERR
+        open STDIN,  '/dev/null'  or die "Can't read /dev/null $!";
+        open STDOUT, ">>$LOGFILE" or die "Can't write $LOGFILE $!";
+        open STDERR, ">>$LOGFILE" or die "Can't write $LOGFILE $!";
+
+        print "Created VCL daemon process: $$\n";
+
 } ## end sub daemonize
 
 #/////////////////////////////////////////////////////////////////////////////


Reply via email to