Skip to content

Commit bcb40a1

Browse files
author
Grok Compression
committed
CoderPool: protect with mutex to avoid race
1 parent dc5cff3 commit bcb40a1

2 files changed

Lines changed: 6 additions & 1 deletion

File tree

src/lib/core/scheduling/CoderPool.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,15 @@ namespace grk
2828
bool CoderPool::contains(uint8_t maxCblkWExp, uint8_t maxCblkHExp)
2929
{
3030
auto key = CoderKey(maxCblkWExp, maxCblkHExp);
31+
std::lock_guard<std::mutex> lock(mutex_);
3132
return coderMap_.find(key) != coderMap_.end();
3233
}
3334

3435
void CoderPool::makeCoders(uint32_t numCoders, uint8_t maxCblkWExp, uint8_t maxCblkHExp,
3536
std::function<std::shared_ptr<t1::ICoder>()> creator)
3637
{
37-
if(contains(maxCblkWExp, maxCblkHExp))
38+
std::lock_guard<std::mutex> lock(mutex_);
39+
if(coderMap_.find({maxCblkWExp, maxCblkHExp}) != coderMap_.end())
3840
return;
3941
std::vector<std::shared_ptr<t1::ICoder>> coders;
4042
for(uint32_t i = 0; i < numCoders; ++i)
@@ -44,6 +46,7 @@ void CoderPool::makeCoders(uint32_t numCoders, uint8_t maxCblkWExp, uint8_t maxC
4446
std::shared_ptr<t1::ICoder> CoderPool::getCoder(size_t worker, uint8_t maxCblkWExp,
4547
uint8_t maxCblkHExp)
4648
{
49+
std::lock_guard<std::mutex> lock(mutex_);
4750
auto it = coderMap_.find({maxCblkWExp, maxCblkHExp});
4851
if(it == coderMap_.end())
4952
{

src/lib/core/scheduling/CoderPool.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#pragma once
1919

20+
#include <mutex>
2021
#include "ICoder.h"
2122

2223
namespace grk
@@ -59,6 +60,7 @@ struct CoderPool
5960
std::shared_ptr<t1::ICoder> getCoder(size_t worker, uint8_t maxCblkWExp, uint8_t maxCblkHExp);
6061

6162
private:
63+
std::mutex mutex_;
6264
CODERMAP coderMap_;
6365
};
6466

0 commit comments

Comments
 (0)