Skip to content

Commit 5626318

Browse files
Check write buffer on stream closed check
Helps to avoid "empty JSON" errors when stream is being reset Relates-To: DATASDK-57 Signed-off-by: Andrey Kashcheev <[email protected]>
1 parent bfd15ff commit 5626318

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

olp-cpp-sdk-dataservice-read/src/repositories/AsyncJsonStream.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,10 @@ size_t RapidJsonByteStream::PutEnd(char*) { return 0; }
5050
bool RapidJsonByteStream::ReadEmpty() const {
5151
return count_ == read_buffer_.size();
5252
}
53-
bool RapidJsonByteStream::WriteEmpty() const { return write_buffer_.empty(); }
53+
bool RapidJsonByteStream::WriteEmpty() const {
54+
std::unique_lock<std::mutex> lock(mutex_);
55+
return write_buffer_.empty();
56+
}
5457

5558
void RapidJsonByteStream::AppendContent(const char* content, size_t length) {
5659
std::unique_lock<std::mutex> lock(mutex_);
@@ -64,7 +67,7 @@ void RapidJsonByteStream::AppendContent(const char* content, size_t length) {
6467

6568
void RapidJsonByteStream::SwapBuffers() {
6669
std::unique_lock<std::mutex> lock(mutex_);
67-
cv_.wait(lock, [&]() { return !WriteEmpty(); });
70+
cv_.wait(lock, [&]() { return !write_buffer_.empty(); });
6871
std::swap(read_buffer_, write_buffer_);
6972
write_buffer_.clear();
7073
count_ = 0;
@@ -114,7 +117,7 @@ boost::optional<client::ApiError> AsyncJsonStream::GetError() const {
114117

115118
bool AsyncJsonStream::IsClosed() const {
116119
std::unique_lock<std::mutex> lock(mutex_);
117-
return closed_;
120+
return closed_ && current_stream_->WriteEmpty();
118121
}
119122

120123
} // namespace repository

0 commit comments

Comments
 (0)