This revision was automatically updated to reflect the committed changes. Closed by commit rGddd576ab87a1: [lldb] Prevent race condition when fetching /proc/cpuinfo (authored by Walter Erquinigo <wall...@fb.com>).
Changed prior to commit: https://reviews.llvm.org/D131081?vs=450226&id=450905#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131081/new/ https://reviews.llvm.org/D131081 Files: lldb/source/Plugins/Process/Linux/Procfs.cpp Index: lldb/source/Plugins/Process/Linux/Procfs.cpp =================================================================== --- lldb/source/Plugins/Process/Linux/Procfs.cpp +++ lldb/source/Plugins/Process/Linux/Procfs.cpp @@ -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 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>>
Index: lldb/source/Plugins/Process/Linux/Procfs.cpp =================================================================== --- lldb/source/Plugins/Process/Linux/Procfs.cpp +++ lldb/source/Plugins/Process/Linux/Procfs.cpp @@ -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 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>>
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits