mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-02 20:42:04 +00:00
Fix deadlocks
This commit is contained in:
parent
c6664bbbdf
commit
16c20332cf
@ -16,7 +16,6 @@ namespace ErrorCodes
|
|||||||
ParallelReadBuffer::ParallelReadBuffer(std::unique_ptr<ReadBufferFactory> reader_factory_, size_t max_working_readers)
|
ParallelReadBuffer::ParallelReadBuffer(std::unique_ptr<ReadBufferFactory> reader_factory_, size_t max_working_readers)
|
||||||
: SeekableReadBufferWithSize(nullptr, 0), pool(max_working_readers), reader_factory(std::move(reader_factory_))
|
: SeekableReadBufferWithSize(nullptr, 0), pool(max_working_readers), reader_factory(std::move(reader_factory_))
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(mutex);
|
|
||||||
initializeWorkers();
|
initializeWorkers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,12 +80,11 @@ off_t ParallelReadBuffer::seek(off_t offset, int whence)
|
|||||||
|
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
finishAndWait();
|
finishAndWait();
|
||||||
lock.lock();
|
|
||||||
|
|
||||||
reader_factory->seek(offset, whence);
|
reader_factory->seek(offset, whence);
|
||||||
all_created = false;
|
all_created = false;
|
||||||
all_completed = false;
|
all_completed = false;
|
||||||
lock.unlock();
|
read_workers.clear();
|
||||||
|
|
||||||
current_position = offset;
|
current_position = offset;
|
||||||
resetWorkingBuffer();
|
resetWorkingBuffer();
|
||||||
@ -170,6 +168,7 @@ void ParallelReadBuffer::processor()
|
|||||||
if (!reader)
|
if (!reader)
|
||||||
{
|
{
|
||||||
all_created = true;
|
all_created = true;
|
||||||
|
next_condvar.notify_all();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user