dbms: development [#CONV-2944].

This commit is contained in:
Alexey Milovidov 2012-10-20 23:02:13 +00:00
parent 71a594fd6d
commit b907de191b

View File

@ -56,6 +56,18 @@ public:
} }
empty_count.set(); empty_count.set();
} }
void clear()
{
while (fill_count.tryWait(0))
{
{
Poco::ScopedLock<Poco::Mutex> lock(mutex);
queue.pop();
}
empty_count.set();
}
}
}; };
@ -103,8 +115,13 @@ public:
finish = true; finish = true;
cancel(); cancel();
// TODO: может быть, здесь может возникнуть блокировка, если очередь переполнена, и какой-нибудь из потоков попытается положить в неё блок. /// Вынем всё, что есть в очереди готовых данных.
output_queue.clear();
/** В этот момент, запоздавшие потоки ещё могут вставить в очередь какие-нибудь блоки, но очередь не переполнится.
* PS. Может быть, для переменной finish нужен барьер?
*/
for (ThreadsData::iterator it = threads_data.begin(); it != threads_data.end(); ++it) for (ThreadsData::iterator it = threads_data.begin(); it != threads_data.end(); ++it)
it->thread->join(); it->thread->join();