summaryrefslogtreecommitdiffstats
path: root/base/file_descriptor_shuffle.h
diff options
context:
space:
mode:
authoragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-11 15:25:54 +0000
committeragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-11 15:25:54 +0000
commitef73044e42948214832dd11dd3326b738f816eb6 (patch)
tree1105589709517fab2cc2ed5d745d82299d510f77 /base/file_descriptor_shuffle.h
parent6e240d7084c1cecc7fdedabe83f860659888dd2f (diff)
downloadchromium_src-ef73044e42948214832dd11dd3326b738f816eb6.zip
chromium_src-ef73044e42948214832dd11dd3326b738f816eb6.tar.gz
chromium_src-ef73044e42948214832dd11dd3326b738f816eb6.tar.bz2
POSIX: don't allocate memory after forking.
Previously we would allocate memory in the child process. However, the allocation might have happened while the malloc lock was held, resulting in a deadlock. This patch removes allocation from the child but probably makes Mac's startup time slower until a Mac person can implement dir_reader_posix.h. TEST=Unittest for new code BUG=36678 http://codereview.chromium.org/672003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@41275 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/file_descriptor_shuffle.h')
-rw-r--r--base/file_descriptor_shuffle.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/base/file_descriptor_shuffle.h b/base/file_descriptor_shuffle.h
index e0cb88b..e1c93cd 100644
--- a/base/file_descriptor_shuffle.h
+++ b/base/file_descriptor_shuffle.h
@@ -69,9 +69,13 @@ typedef std::vector<InjectionArc> InjectiveMultimap;
bool PerformInjectiveMultimap(const InjectiveMultimap& map,
InjectionDelegate* delegate);
-static inline bool ShuffleFileDescriptors(const InjectiveMultimap& map) {
+bool PerformInjectiveMultimapDestructive(InjectiveMultimap* map,
+ InjectionDelegate* delegate);
+
+// This function will not call malloc but will mutate |map|
+static inline bool ShuffleFileDescriptors(InjectiveMultimap* map) {
FileDescriptorTableInjection delegate;
- return PerformInjectiveMultimap(map, &delegate);
+ return PerformInjectiveMultimapDestructive(map, &delegate);
}
} // namespace base