mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-28 08:16:09 +03:00
53 lines
1.4 KiB
C++
53 lines
1.4 KiB
C++
|
// Copyright 2015 The Chromium Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#include <stdint.h>
|
||
|
|
||
|
#include "base/logging.h"
|
||
|
#include "base/process/process_handle.h"
|
||
|
#include "build/build_config.h"
|
||
|
|
||
|
namespace base {
|
||
|
|
||
|
namespace {
|
||
|
bool g_have_unique_id = false;
|
||
|
uint32_t g_unique_id;
|
||
|
|
||
|
// The process which set |g_unique_id|.
|
||
|
ProcessId g_procid;
|
||
|
|
||
|
// Mangle IDs so that they are not accidentally used as PIDs, e.g. as an
|
||
|
// argument to kill or waitpid.
|
||
|
uint32_t MangleProcessId(ProcessId process_id) {
|
||
|
// Add a large power of 10 so that the pid is still the pid is still readable
|
||
|
// inside the mangled id.
|
||
|
return static_cast<uint32_t>(process_id) + 1000000000U;
|
||
|
}
|
||
|
|
||
|
} // namespace
|
||
|
|
||
|
uint32_t GetUniqueIdForProcess() {
|
||
|
if (!g_have_unique_id) {
|
||
|
return MangleProcessId(GetCurrentProcId());
|
||
|
}
|
||
|
|
||
|
// Make sure we are the same process that set |g_procid|. This check may have
|
||
|
// false negatives (if a process ID was reused) but should have no false
|
||
|
// positives.
|
||
|
DCHECK_EQ(GetCurrentProcId(), g_procid);
|
||
|
return g_unique_id;
|
||
|
}
|
||
|
|
||
|
#if defined(OS_LINUX) || defined(OS_AIX)
|
||
|
|
||
|
void InitUniqueIdForProcessInPidNamespace(ProcessId pid_outside_of_namespace) {
|
||
|
g_unique_id = MangleProcessId(pid_outside_of_namespace);
|
||
|
g_procid = GetCurrentProcId();
|
||
|
g_have_unique_id = true;
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
} // namespace base
|