Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(884)

Unified Diff: base/process/launch_posix.cc

Issue 114603009: posix LaunchProcess: Don't use STL iterators after fork. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/posix/file_descriptor_shuffle.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/process/launch_posix.cc
diff --git a/base/process/launch_posix.cc b/base/process/launch_posix.cc
index 8dc8f9e215dc4404fe0253aa719302b62936d356..55a16dc0f6c3dcf39b47419ec768fbfb8c89ea7f 100644
--- a/base/process/launch_posix.cc
+++ b/base/process/launch_posix.cc
@@ -207,7 +207,7 @@ static const char kFDDir[] = "/proc/self/fd";
#endif
void CloseSuperfluousFds(const base::InjectiveMultimap& saved_mapping) {
- // DANGER: no calls to malloc are allowed from now on:
+ // DANGER: no calls to malloc or locks are allowed from now on:
// http://crbug.com/36678
// Get the maximum number of FDs possible.
@@ -220,12 +220,13 @@ void CloseSuperfluousFds(const base::InjectiveMultimap& saved_mapping) {
const int fd = static_cast<int>(i);
if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO)
continue;
- InjectiveMultimap::const_iterator j;
- for (j = saved_mapping.begin(); j != saved_mapping.end(); j++) {
- if (fd == j->dest)
+ // Cannot use STL iterators here, since debug iterators use locks.
+ size_t j;
+ for (j = 0; j < saved_mapping.size(); j++) {
+ if (fd == saved_mapping[j].dest)
break;
}
- if (j != saved_mapping.end())
+ if (j < saved_mapping.size())
continue;
// Since we're just trying to close anything we can find,
@@ -249,12 +250,13 @@ void CloseSuperfluousFds(const base::InjectiveMultimap& saved_mapping) {
continue;
if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO)
continue;
- InjectiveMultimap::const_iterator i;
- for (i = saved_mapping.begin(); i != saved_mapping.end(); i++) {
- if (fd == i->dest)
+ // Cannot use STL iterators here, since debug iterators use locks.
+ size_t i;
+ for (i = 0; i < saved_mapping.size(); i++) {
+ if (fd == saved_mapping[i].dest)
break;
}
- if (i != saved_mapping.end())
+ if (i < saved_mapping.size())
continue;
if (fd == dir_fd)
continue;
@@ -388,7 +390,7 @@ bool LaunchProcess(const std::vector<std::string>& argv,
memset(reinterpret_cast<void*>(malloc), 0xff, 8);
#endif // 0
- // DANGER: no calls to malloc are allowed from now on:
+ // DANGER: no calls to malloc or locks are allowed from now on:
// http://crbug.com/36678
#if defined(OS_CHROMEOS)
@@ -406,11 +408,12 @@ bool LaunchProcess(const std::vector<std::string>& argv,
#endif // defined(OS_CHROMEOS)
if (options.fds_to_remap) {
- for (FileHandleMappingVector::const_iterator
- it = options.fds_to_remap->begin();
- it != options.fds_to_remap->end(); ++it) {
- fd_shuffle1.push_back(InjectionArc(it->first, it->second, false));
- fd_shuffle2.push_back(InjectionArc(it->first, it->second, false));
+ // Cannot use STL iterators here, since debug iterators use locks.
+ for (size_t i = 0; i < options.fds_to_remap->size(); ++i) {
+ const FileHandleMappingVector::value_type& value =
+ (*options.fds_to_remap)[i];
+ fd_shuffle1.push_back(InjectionArc(value.first, value.second, false));
+ fd_shuffle2.push_back(InjectionArc(value.first, value.second, false));
}
}
@@ -521,7 +524,7 @@ static GetAppOutputInternalResult GetAppOutputInternal(
#if defined(OS_MACOSX)
RestoreDefaultExceptionHandler();
#endif
- // DANGER: no calls to malloc are allowed from now on:
+ // 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*(),
« no previous file with comments | « base/posix/file_descriptor_shuffle.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698