From cc24ae217e18b6937042e7144f0c61ca9ef9a4b6 Mon Sep 17 00:00:00 2001
From: lihan <tclh123@gmail.com>
Date: Tue, 27 Feb 2018 12:56:36 +0800
Subject: [PATCH] fixup set rlimit stack failed condition

---
 lib/base/application.cpp | 47 ++++++++++++++++++++--------------------
 1 file changed, 24 insertions(+), 23 deletions(-)

diff --git a/lib/base/application.cpp b/lib/base/application.cpp
index 1c1aa6776..c575d8e1d 100644
--- a/lib/base/application.cpp
+++ b/lib/base/application.cpp
@@ -255,32 +255,33 @@ void Application::SetResourceLimits()
 		else
 			rl.rlim_cur = rl.rlim_max;
 
-		if (setrlimit(RLIMIT_STACK, &rl) < 0)
+		if (setrlimit(RLIMIT_STACK, &rl) < 0) {
 			Log(LogNotice, "Application", "Could not adjust resource limit for stack size (RLIMIT_STACK)");
-		else if (set_stack_rlimit) {
-			char **new_argv = static_cast<char **>(malloc(sizeof(char *) * (argc + 2)));
+			if (set_stack_rlimit) {
+				char **new_argv = static_cast<char **>(malloc(sizeof(char *) * (argc + 2)));
 
-			if (!new_argv) {
-				perror("malloc");
-				Exit(EXIT_FAILURE);
+				if (!new_argv) {
+					perror("malloc");
+					Exit(EXIT_FAILURE);
+				}
+
+				new_argv[0] = argv[0];
+				new_argv[1] = strdup("--no-stack-rlimit");
+
+				if (!new_argv[1]) {
+					perror("strdup");
+					exit(1);
+				}
+
+				for (int i = 1; i < argc; i++)
+					new_argv[i + 1] = argv[i];
+
+				new_argv[argc + 1] = nullptr;
+
+				(void) execvp(new_argv[0], new_argv);
+				perror("execvp");
+				_exit(EXIT_FAILURE);
 			}
-
-			new_argv[0] = argv[0];
-			new_argv[1] = strdup("--no-stack-rlimit");
-
-			if (!new_argv[1]) {
-				perror("strdup");
-				exit(1);
-			}
-
-			for (int i = 1; i < argc; i++)
-				new_argv[i + 1] = argv[i];
-
-			new_argv[argc + 1] = nullptr;
-
-			(void) execvp(new_argv[0], new_argv);
-			perror("execvp");
-			_exit(EXIT_FAILURE);
 		}
 #	else /* RLIMIT_STACK */
 		Log(LogNotice, "Application", "System does not support adjusting the resource limit for stack size (RLIMIT_STACK)");