Revision
15164
Author
anthm
Date
2009-10-15 10:25:06 -0500 (Thu, 15 Oct 2009)

Log Message

fix arg parsing on restart to not accumulate args

Modified Paths

Diff

Modified: freeswitch/trunk/src/switch.c (15163 => 15164)


--- freeswitch/trunk/src/switch.c	2009-10-15 13:52:57 UTC (rev 15163)
+++ freeswitch/trunk/src/switch.c	2009-10-15 15:25:06 UTC (rev 15164)
@@ -273,6 +273,7 @@
 	char *opts;
 	char opts_str[1024] = "";
 	char *local_argv[1024] = { 0 };
+	int local_argc = argc;
 	char *arg_argv[128] = { 0 };
 	char *usageDesc;
 	int alt_dirs = 0;
@@ -300,7 +301,7 @@
 		strncpy(opts_str, opts, sizeof(opts_str) - 1);
 		i = switch_separate_string(opts_str, ' ', arg_argv, (sizeof(arg_argv) / sizeof(arg_argv[0])));
 		for (x = 0; x < i; x++) {
-			local_argv[argc++] = arg_argv[x];
+			local_argv[local_argc++] = arg_argv[x];
 		}
 	}
 
@@ -339,7 +340,7 @@
 		"\t-htdocs [htdocsdir]    -- specify an alternate htdocs dir\n"
 		"\t-scripts [scriptsdir]  -- specify an alternate scripts dir\n";
 
-	for (x = 1; x < argc; x++) {
+	for (x = 1; x < local_argc; x++) {
 		known_opt = 0;
 #ifdef WIN32
 		if (x == 1) {
@@ -671,10 +672,10 @@
 			setrlimit(RLIMIT_STACK, &rlp);
 
 			apr_terminate();
-			ret = (int)execv(local_argv[0], local_argv);
+			ret = (int)execv(argv[0], argv);
 			
 			for(i = 0; i < argc; i++) {
-				switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%s ", local_argv[i]);
+				switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%s ", argv[i]);
 			}
 
 			return system(buf);
@@ -764,13 +765,12 @@
 		char buf[1024] = "";
 		int j = 0;
 		
-		switch_assert(local_argv[0]);
 		switch_sleep(1000000);
-		ret = (int)execv(local_argv[0], local_argv);
+		ret = (int)execv(argv[0], argv);
 		fprintf(stderr, "Restart Failed [%s] resorting to plan b\n", strerror(errno));
 
 		for(j = 0; j < argc; j++) {
-			switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%s ", local_argv[j]);
+			switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%s ", argv[j]);
 		}
 
 		ret = system(buf);