| Index: base/process_util_posix.cc
|
| diff --git a/base/process_util_posix.cc b/base/process_util_posix.cc
|
| index 9ea0e41e7167b12857b97d641839435e40697dcb..6d41fe6cd66c034a26ce80848af7bdc76051eabd 100644
|
| --- a/base/process_util_posix.cc
|
| +++ b/base/process_util_posix.cc
|
| @@ -17,6 +17,7 @@
|
| #include <limits>
|
| #include <set>
|
|
|
| +#include "base/allocator/type_profiler_control.h"
|
| #include "base/command_line.h"
|
| #include "base/compiler_specific.h"
|
| #include "base/debug/debugger.h"
|
| @@ -639,6 +640,11 @@ bool LaunchProcess(const std::vector<std::string>& argv,
|
| }
|
| }
|
|
|
| + // Stop type-profiler.
|
| + // The profiler should be stopped between fork and exec since it inserts
|
| + // locks at new/delete expressions. See http://crbug.com/36678.
|
| + base::type_profiler::Controller::Stop();
|
| +
|
| if (options.maximize_rlimits) {
|
| // Some resource limits need to be maximal in this child.
|
| std::set<int>::const_iterator resource;
|
| @@ -1107,6 +1113,11 @@ static GetAppOutputInternalResult GetAppOutputInternal(
|
| if (dev_null < 0)
|
| _exit(127);
|
|
|
| + // Stop type-profiler.
|
| + // The profiler should be stopped between fork and exec since it inserts
|
| + // locks at new/delete expressions. See http://crbug.com/36678.
|
| + base::type_profiler::Controller::Stop();
|
| +
|
| fd_shuffle1.push_back(InjectionArc(pipe_fd[1], STDOUT_FILENO, true));
|
| fd_shuffle1.push_back(InjectionArc(dev_null, STDERR_FILENO, true));
|
| fd_shuffle1.push_back(InjectionArc(dev_null, STDIN_FILENO, true));
|
|
|