From abaa476641ccf2fbf73dae96471bc72dbaafb528 Mon Sep 17 00:00:00 2001
From: Philippe Canal <pcanal@fnal.gov>
Date: Thu, 4 Feb 2021 21:30:48 -0600
Subject: [PATCH] Make TBufferMerger::GetQueueSize thread safe.

This can now be safely use to avoid overloading the queue.
---
 io/io/inc/ROOT/TBufferMerger.hxx | 2 +-
 io/io/src/TBufferMerger.cxx      | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/io/io/inc/ROOT/TBufferMerger.hxx b/io/io/inc/ROOT/TBufferMerger.hxx
index 27fe36d399e..48592cf00ab 100644
--- a/io/io/inc/ROOT/TBufferMerger.hxx
+++ b/io/io/inc/ROOT/TBufferMerger.hxx
@@ -114,7 +114,7 @@ private:
    size_t fBuffered{0};                                          //< Number of bytes currently buffered
    TFileMerger fMerger{false, false};                            //< TFileMerger used to merge all buffers
    std::mutex fMergeMutex;                                       //< Mutex used to lock fMerger
-   std::mutex fQueueMutex;                                       //< Mutex used to lock fQueue
+   mutable std::mutex fQueueMutex;                               //< Mutex used to lock fQueue
    std::queue<TBufferFile *> fQueue;                             //< Queue to which data is pushed and merged
    std::vector<std::weak_ptr<TBufferMergerFile>> fAttachedFiles; //< Attached files
 };
diff --git a/io/io/src/TBufferMerger.cxx b/io/io/src/TBufferMerger.cxx
index 8d320d5362e..f7b9d5d1099 100644
--- a/io/io/src/TBufferMerger.cxx
+++ b/io/io/src/TBufferMerger.cxx
@@ -62,6 +62,7 @@ std::shared_ptr<TBufferMergerFile> TBufferMerger::GetFile()
 
 size_t TBufferMerger::GetQueueSize() const
 {
+   std::lock_guard<std::mutex> lock(fQueueMutex);
    return fQueue.size();
 }
 
-- 
GitLab