| Index: content/common/child_process_host_impl.cc
|
| diff --git a/content/common/child_process_host_impl.cc b/content/common/child_process_host_impl.cc
|
| index 1467536ac91131404381ba8f1b1d177c564e4de8..c7fc9a5b2fc18daa2296acaf63b941e584409e75 100644
|
| --- a/content/common/child_process_host_impl.cc
|
| +++ b/content/common/child_process_host_impl.cc
|
| @@ -6,7 +6,7 @@
|
|
|
| #include <limits>
|
|
|
| -#include "base/atomicops.h"
|
| +#include "base/atomic_sequence_num.h"
|
| #include "base/command_line.h"
|
| #include "base/files/file_path.h"
|
| #include "base/logging.h"
|
| @@ -30,9 +30,9 @@
|
| #include "content/common/font_cache_dispatcher_win.h"
|
| #endif // OS_LINUX
|
|
|
| -#if defined(OS_MACOSX)
|
| namespace {
|
|
|
| +#if defined(OS_MACOSX)
|
| // Given |path| identifying a Mac-style child process executable path, adjusts
|
| // it to correspond to |feature|. For a child process path such as
|
| // ".../Chromium Helper.app/Contents/MacOS/Chromium Helper", the transformed
|
| @@ -66,19 +66,22 @@ base::FilePath TransformPathForFeature(const base::FilePath& path,
|
| new_basename_app.append(kAppExtension);
|
|
|
| base::FilePath new_path = root_path.Append(new_basename_app)
|
| - .Append(kContentsName)
|
| - .Append(kMacOSName)
|
| - .Append(new_basename);
|
| + .Append(kContentsName)
|
| + .Append(kMacOSName)
|
| + .Append(new_basename);
|
|
|
| return new_path;
|
| }
|
| +#endif // OS_MACOSX
|
| +
|
| +// Global atomic to generate child process unique IDs.
|
| +base::StaticAtomicSequenceNumber g_unique_id;
|
|
|
| } // namespace
|
| -#endif // OS_MACOSX
|
|
|
| namespace content {
|
|
|
| -int ChildProcessHostImpl::kInvalidChildProcessId = -1;
|
| +int ChildProcessHost::kInvalidChildProcessUniqueId = -1;
|
|
|
| // static
|
| ChildProcessHost* ChildProcessHost::Create(ChildProcessHostDelegate* delegate) {
|
| @@ -212,11 +215,13 @@ void ChildProcessHostImpl::AllocateSharedMemory(
|
| int ChildProcessHostImpl::GenerateChildProcessUniqueId() {
|
| // This function must be threadsafe.
|
| //
|
| - // TODO(ajwong): Why not StaticAtomicSequenceNumber?
|
| - static base::subtle::Atomic32 last_unique_child_id = 0;
|
| - int id = base::subtle::NoBarrier_AtomicIncrement(&last_unique_child_id, 1);
|
| + // Historically, this function returned ids started with 1, so in several
|
| + // places in the code a value of 0 (rather than kInvalidChildProcessUniqueId)
|
| + // was used as an invalid value. So we retain those semantics.
|
| + int id = g_unique_id.GetNext() + 1;
|
|
|
| - CHECK_NE(kInvalidChildProcessId, id);
|
| + CHECK_NE(0, id);
|
| + CHECK_NE(kInvalidChildProcessUniqueId, id);
|
|
|
| return id;
|
| }
|
|
|