Skip to content

Commit 832deee

Browse files
authored
Merge pull request #9178 from JiayiFeng/fix_bugs_in_reader
Fix bugs in c++ readers
2 parents 0e30fae + 6f7e812 commit 832deee

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

paddle/fluid/operators/reader/create_double_buffer_reader_op.cc

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,20 +48,24 @@ class DoubleBufferReader : public framework::DecoratedReader {
4848

4949
void start_thread() {
5050
buffer_ = framework::MakeChannel<Item>(kDoubleBufferSize);
51-
std::thread prefetch([this] { PrefetchThreadFunc(); });
52-
prefetch.detach();
51+
prefetcher_ = std::thread([this] { PrefetchThreadFunc(); });
5352
}
5453

5554
void ReadNext(std::vector<framework::LoDTensor>* out) override;
5655
void ReInit() override;
5756

58-
~DoubleBufferReader() { buffer_->Close(); }
57+
~DoubleBufferReader() {
58+
buffer_->Close();
59+
prefetcher_.join();
60+
delete buffer_;
61+
}
5962

6063
bool HasNext() const override;
6164

6265
private:
6366
void PrefetchThreadFunc();
6467

68+
std::thread prefetcher_;
6569
framework::Channel<Item>* buffer_;
6670
platform::Place place_;
6771
std::vector<std::unique_ptr<platform::DeviceContext>> ctxs_;
@@ -134,6 +138,8 @@ void DoubleBufferReader::ReadNext(std::vector<framework::LoDTensor>* out) {
134138
void DoubleBufferReader::ReInit() {
135139
reader_->ReInit();
136140
buffer_->Close();
141+
prefetcher_.join();
142+
delete buffer_;
137143
start_thread();
138144
}
139145

@@ -159,11 +165,12 @@ void DoubleBufferReader::PrefetchThreadFunc() {
159165

160166
if (!buffer_->Send(&batch)) {
161167
VLOG(5) << "WARNING: The double buffer channel has been closed. The "
162-
"prefetch thread terminates.";
168+
"prefetch thread will terminate.";
163169
break;
164170
}
165171
}
166172
buffer_->Close();
173+
VLOG(5) << "Prefetch thread terminates.";
167174
}
168175

169176
bool DoubleBufferReader::HasNext() const {

paddle/fluid/operators/reader/create_shuffle_reader_op.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ class ShuffleReader : public framework::DecoratedReader {
3434
}
3535

3636
void ReadNext(std::vector<framework::LoDTensor>* out) override {
37+
if (!HasNext()) {
38+
PADDLE_THROW("There is no next data!");
39+
}
3740
if (iteration_pos_ >= buffer_.size()) {
3841
VLOG(10) << "Resetting shuffle buffer";
3942
ReadIntoBuffers();
@@ -50,7 +53,6 @@ class ShuffleReader : public framework::DecoratedReader {
5053
buffer_.clear();
5154
buffer_.reserve(buffer_size_);
5255
iteration_pos_ = 0;
53-
PADDLE_ENFORCE(reader_->HasNext());
5456
for (size_t i = 0; i < buffer_size_; ++i) {
5557
if (!reader_->HasNext()) {
5658
break;

0 commit comments

Comments
 (0)