mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 23:52:03 +00:00
dbms: fixed one of errors [#METR-15352].
This commit is contained in:
parent
7c9b2a1789
commit
1ba32c6fbb
@ -10,13 +10,34 @@ namespace DB
|
||||
|
||||
struct BlockIO
|
||||
{
|
||||
/** process_list_entry должен уничтожаться позже, чем in и out,
|
||||
* так как внутри in и out есть ссылка на объект внутри process_list_entry
|
||||
* (MemoryTracker * current_memory_tracker),
|
||||
* которая может использоваться до уничтожения in и out.
|
||||
*/
|
||||
ProcessList::EntryPtr process_list_entry;
|
||||
|
||||
BlockInputStreamPtr in;
|
||||
BlockOutputStreamPtr out;
|
||||
|
||||
Block in_sample; /// Пример блока, который будет прочитан из in.
|
||||
Block out_sample; /// Пример блока, которого нужно писать в out.
|
||||
|
||||
ProcessList::EntryPtr process_list_entry;
|
||||
BlockIO & operator= (const BlockIO & rhs)
|
||||
{
|
||||
/// Обеспечиваем правильный порядок уничтожения.
|
||||
out = nullptr;
|
||||
in = nullptr;
|
||||
process_list_entry = nullptr;
|
||||
|
||||
process_list_entry = rhs.process_list_entry;
|
||||
in = rhs.in;
|
||||
out = rhs.out;
|
||||
in_sample = rhs.in_sample;
|
||||
out_sample = rhs.out_sample;
|
||||
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -54,15 +54,6 @@ struct QueryState
|
||||
|
||||
void reset()
|
||||
{
|
||||
/** process_list_entry также включает/выключает учёт памяти MemoryTracker-ом.
|
||||
* Члены maybe_compressed_in, block_in, maybe_compressed_out, block_out
|
||||
* могли быть инициализированы до io, и выделенная в них память могла не быть учтена MemoryTracker-ом.
|
||||
* Если эти члены будут уничтожены раньше, то освобождение памяти будет учтено MemoryTracker-ом,
|
||||
* и вычисленный расход памяти может оказаться отрицательным (это не проблема, но некрасиво).
|
||||
* Поэтому, сначала уничтожим process_list_entry.
|
||||
*/
|
||||
io.process_list_entry = nullptr;
|
||||
|
||||
*this = QueryState();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user