You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by fa...@apache.org on 2010/07/14 22:30:19 UTC

svn commit: r964187 - /incubator/vcl/trunk/managementnode/bin/vcld

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
 
 #/////////////////////////////////////////////////////////////////////////////