File tree Expand file tree Collapse file tree 2 files changed +10
-3
lines changed
Expand file tree Collapse file tree 2 files changed +10
-3
lines changed Original file line number Diff line number Diff line change @@ -149,13 +149,22 @@ MemoryPagesPool::~MemoryPagesPool()
149149
150150void * MemoryPagesPool::getPage ()
151151{
152+ // disable concurrent execution of this function
153+ std::unique_lock<std::mutex> lock (pagesAvailableMutexPop);
154+
152155 // update statistics
153156 poolStats.set ((CounterValue)getNumberOfPagesAvailable ());
154157
155158 // get a page from fifo, if available
156159 void * ptr = nullptr ;
157160 pagesAvailable->pop (ptr);
158161
162+ // udpate buffer state
163+ updateBufferState ();
164+
165+ // the following does not need exclusive access, release lock
166+ lock.unlock ();
167+
159168 // stats
160169 if (MemoryPagesPoolStatsEnabled) {
161170 if (ptr != nullptr ) {
@@ -172,9 +181,6 @@ void* MemoryPagesPool::getPage()
172181 }
173182 }
174183
175- // udpate buffer state
176- updateBufferState ();
177-
178184 return ptr;
179185}
180186
Original file line number Diff line number Diff line change @@ -97,6 +97,7 @@ class MemoryPagesPool
9797
9898 std::unique_ptr<AliceO2::Common::Fifo<void *>> pagesAvailable; // a buffer to keep track of individual pages
9999 std::mutex pagesAvailableMutexPush; // a lock to avoid concurrent push-back of free pages to fifo
100+ std::mutex pagesAvailableMutexPop; // a lock to avoid concurrent get free pages from fifo
100101
101102 size_t numberOfPages; // number of pages
102103 size_t pageSize; // size of each page, in bytes
You can’t perform that action at this time.
0 commit comments