[lldb] Prevent race condition when fetching /proc/cpuinfo
@clayborg found a potential race condition when setting a static variable. The fix seems simply to use call_once. All relevant tests pass. Differential Revision: https://reviews.llvm.org/D131081
This commit is contained in:
parent
33af4b22f8
commit
ddd576ab87
|
@ -7,9 +7,9 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "Procfs.h"
|
||||
|
||||
#include "lldb/Host/linux/Support.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/Support/Threading.h"
|
||||
|
||||
using namespace lldb;
|
||||
using namespace lldb_private;
|
||||
|
@ -17,17 +17,14 @@ using namespace process_linux;
|
|||
using namespace llvm;
|
||||
|
||||
Expected<ArrayRef<uint8_t>> lldb_private::process_linux::GetProcfsCpuInfo() {
|
||||
static Optional<std::vector<uint8_t>> cpu_info;
|
||||
if (!cpu_info) {
|
||||
auto buffer_or_error = errorOrToExpected(getProcFile("cpuinfo"));
|
||||
if (!buffer_or_error)
|
||||
return buffer_or_error.takeError();
|
||||
MemoryBuffer &buffer = **buffer_or_error;
|
||||
cpu_info = std::vector<uint8_t>(
|
||||
reinterpret_cast<const uint8_t *>(buffer.getBufferStart()),
|
||||
reinterpret_cast<const uint8_t *>(buffer.getBufferEnd()));
|
||||
}
|
||||
return *cpu_info;
|
||||
static ErrorOr<std::unique_ptr<MemoryBuffer>> cpu_info_or_err =
|
||||
getProcFile("cpuinfo");
|
||||
|
||||
if (!*cpu_info_or_err)
|
||||
cpu_info_or_err.getError();
|
||||
|
||||
MemoryBuffer &buffer = **cpu_info_or_err;
|
||||
return arrayRefFromStringRef(buffer.getBuffer());
|
||||
}
|
||||
|
||||
Expected<std::vector<cpu_id_t>>
|
||||
|
|
Loading…
Reference in New Issue
Block a user