input/InputStreams: pass std::unique_lock<> to various methods

This commit is contained in:
Max Kellermann
2019-04-26 19:19:45 +02:00
parent 040573c636
commit 1b5c1f75a4
33 changed files with 212 additions and 156 deletions

View File

@@ -28,7 +28,8 @@ public:
return remaining == 0;
}
size_t Read(void *ptr, size_t read_size) override {
size_t Read(std::unique_lock<Mutex> &,
void *ptr, size_t read_size) override {
size_t nbytes = std::min(remaining, read_size);
memcpy(ptr, data, nbytes);
data += nbytes;
@@ -51,7 +52,7 @@ TEST(RewindInputStream, Basic)
EXPECT_TRUE(ris.get() != sis);
EXPECT_TRUE(ris != nullptr);
const std::lock_guard<Mutex> protect(mutex);
std::unique_lock<Mutex> lock(mutex);
ris->Update();
EXPECT_TRUE(ris->IsReady());
@@ -59,50 +60,50 @@ TEST(RewindInputStream, Basic)
EXPECT_EQ(offset_type(0), ris->GetOffset());
char buffer[16];
size_t nbytes = ris->Read(buffer, 2);
size_t nbytes = ris->Read(lock, buffer, 2);
EXPECT_EQ(size_t(2), nbytes);
EXPECT_EQ('f', buffer[0]);
EXPECT_EQ('o', buffer[1]);
EXPECT_EQ(offset_type(2), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
nbytes = ris->Read(buffer, 2);
nbytes = ris->Read(lock, buffer, 2);
EXPECT_EQ(size_t(2), nbytes);
EXPECT_EQ('o', buffer[0]);
EXPECT_EQ(' ', buffer[1]);
EXPECT_EQ(offset_type(4), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
ris->Seek(1);
ris->Seek(lock, 1);
EXPECT_EQ(offset_type(1), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
nbytes = ris->Read(buffer, 2);
nbytes = ris->Read(lock, buffer, 2);
EXPECT_EQ(size_t(2), nbytes);
EXPECT_EQ('o', buffer[0]);
EXPECT_EQ('o', buffer[1]);
EXPECT_EQ(offset_type(3), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
ris->Seek(0);
ris->Seek(lock, 0);
EXPECT_EQ(offset_type(0), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
nbytes = ris->Read(buffer, 2);
nbytes = ris->Read(lock, buffer, 2);
EXPECT_EQ(size_t(2), nbytes);
EXPECT_EQ('f', buffer[0]);
EXPECT_EQ('o', buffer[1]);
EXPECT_EQ(offset_type(2), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
nbytes = ris->Read(buffer, sizeof(buffer));
nbytes = ris->Read(lock, buffer, sizeof(buffer));
EXPECT_EQ(size_t(2), nbytes);
EXPECT_EQ('o', buffer[0]);
EXPECT_EQ(' ', buffer[1]);
EXPECT_EQ(offset_type(4), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
nbytes = ris->Read(buffer, sizeof(buffer));
nbytes = ris->Read(lock, buffer, sizeof(buffer));
EXPECT_EQ(size_t(3), nbytes);
EXPECT_EQ('b', buffer[0]);
EXPECT_EQ('a', buffer[1]);
@@ -110,11 +111,11 @@ TEST(RewindInputStream, Basic)
EXPECT_EQ(offset_type(7), ris->GetOffset());
EXPECT_TRUE(ris->IsEOF());
ris->Seek(3);
ris->Seek(lock, 3);
EXPECT_EQ(offset_type(3), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
nbytes = ris->Read(buffer, sizeof(buffer));
nbytes = ris->Read(lock, buffer, sizeof(buffer));
EXPECT_EQ(size_t(4), nbytes);
EXPECT_EQ(' ', buffer[0]);
EXPECT_EQ('b', buffer[1]);

View File

@@ -131,7 +131,7 @@ tag_save(FILE *file, const Tag &tag)
static int
dump_input_stream(InputStream *is)
{
const std::lock_guard<Mutex> protect(is->mutex);
std::unique_lock<Mutex> lock(is->mutex);
/* print meta data */
@@ -150,7 +150,7 @@ dump_input_stream(InputStream *is)
}
char buffer[4096];
size_t num_read = is->Read(buffer, sizeof(buffer));
size_t num_read = is->Read(lock, buffer, sizeof(buffer));
if (num_read == 0)
break;