Index: base/process/launch_posix.cc |
diff --git a/base/process/launch_posix.cc b/base/process/launch_posix.cc |
index 55a16dc0f6c3dcf39b47419ec768fbfb8c89ea7f..daa055dfee9ef667f4d09d87bde76e4d98fb4f51 100644 |
--- a/base/process/launch_posix.cc |
+++ b/base/process/launch_posix.cc |
@@ -320,6 +320,9 @@ bool LaunchProcess(const std::vector<std::string>& argv, |
} else if (pid == 0) { |
// Child process |
+ // DANGER: no calls to malloc or locks are allowed from now on: |
+ // http://crbug.com/36678 |
+ |
// DANGER: fork() rule: in the child, if you don't end up doing exec*(), |
// you call _exit() instead of exit(). This is because _exit() does not |
// call any previously-registered (in the parent) exit handlers, which |
@@ -358,16 +361,14 @@ bool LaunchProcess(const std::vector<std::string>& argv, |
if (options.maximize_rlimits) { |
// Some resource limits need to be maximal in this child. |
- std::set<int>::const_iterator resource; |
- for (resource = options.maximize_rlimits->begin(); |
- resource != options.maximize_rlimits->end(); |
- ++resource) { |
+ for (size_t i = 0; i < options.maximize_rlimits->size(); ++i) { |
+ const int resource = (*options.maximize_rlimits)[i]; |
struct rlimit limit; |
- if (getrlimit(*resource, &limit) < 0) { |
+ if (getrlimit(resource, &limit) < 0) { |
RAW_LOG(WARNING, "getrlimit failed"); |
} else if (limit.rlim_cur < limit.rlim_max) { |
limit.rlim_cur = limit.rlim_max; |
- if (setrlimit(*resource, &limit) < 0) { |
+ if (setrlimit(resource, &limit) < 0) { |
RAW_LOG(WARNING, "setrlimit failed"); |
} |
} |
@@ -390,9 +391,6 @@ bool LaunchProcess(const std::vector<std::string>& argv, |
memset(reinterpret_cast<void*>(malloc), 0xff, 8); |
#endif // 0 |
- // DANGER: no calls to malloc or locks are allowed from now on: |
- // http://crbug.com/36678 |
- |
#if defined(OS_CHROMEOS) |
if (options.ctrl_terminal_fd >= 0) { |
// Set process' controlling terminal. |
@@ -521,11 +519,12 @@ static GetAppOutputInternalResult GetAppOutputInternal( |
return EXECUTE_FAILURE; |
case 0: // child |
{ |
+ // DANGER: no calls to malloc or locks are allowed from now on: |
+ // http://crbug.com/36678 |
+ |
#if defined(OS_MACOSX) |
RestoreDefaultExceptionHandler(); |
#endif |
- // DANGER: no calls to malloc or locks are allowed from now on: |
- // http://crbug.com/36678 |
// Obscure fork() rule: in the child, if you don't end up doing exec*(), |
// you call _exit() instead of exit(). This is because _exit() does not |
@@ -547,8 +546,8 @@ static GetAppOutputInternalResult GetAppOutputInternal( |
// Adding another element here? Remeber to increase the argument to |
// reserve(), above. |
- std::copy(fd_shuffle1.begin(), fd_shuffle1.end(), |
- std::back_inserter(fd_shuffle2)); |
+ for (size_t i = 0; i < fd_shuffle1.size(); ++i) |
+ fd_shuffle2.push_back(fd_shuffle1[i]); |
if (!ShuffleFileDescriptors(&fd_shuffle1)) |
_exit(127); |