Index: base/process/launch.h |
diff --git a/base/process/launch.h b/base/process/launch.h |
index eca4f8f7a44eeb1af2b0625dff6bc3f0b32b60d3..de1bc0af821f2bb54160b8fda873093388c811d9 100644 |
--- a/base/process/launch.h |
+++ b/base/process/launch.h |
@@ -291,6 +291,25 @@ void ReplaceBootstrapPort(const std::string& replacement_bootstrap_name); |
// binary. This should not be called in production/released code. |
BASE_EXPORT LaunchOptions LaunchOptionsForTest(); |
+#if defined(OS_LINUX) |
+// A wrapper for clone with fork-like behavior, meaning that it returns the |
+// child's pid in the parent and 0 in the child. |flags|, |ptid|, and |ctid| are |
+// as in the clone system call (the CLONE_VM flag is not supported). |
+// |
+// This function uses the libc clone wrapper (which updates libc's pid cache) |
+// internally, so callers may expect things like getpid() to work correctly |
+// after in both the child and parent. An exception is when this code is run |
+// under Valgrind. Valgrind does not support the libc clone wrapper, so the libc |
+// pid cache may be incorrect after this function is called under Valgrind. |
+// |
+// As with fork(), callers should be extremely careful when calling this while |
+// multiple threads are running, since at the time the fork happened, the |
+// threads could have been in any state (potentially holding locks, etc.). |
+// Callers should most likely call execve() in the child soon after calling |
+// this. |
+BASE_EXPORT pid_t ForkWithFlags(unsigned long flags, pid_t* ptid, pid_t* ctid); |
+#endif |
+ |
} // namespace base |
#endif // BASE_PROCESS_LAUNCH_H_ |