StorageLog: avoid UB for rwlock unlock due to unlock from another thread

This commit is contained in:
Azat Khuzhin 2021-04-04 08:23:12 +03:00
parent 5d795661ed
commit 89a96cf14d
3 changed files with 10 additions and 0 deletions

View File

@ -357,6 +357,11 @@ void LogBlockOutputStream::writeSuffix()
streams.clear(); streams.clear();
done = true; done = true;
/// unlock should be done from the same thread as lock, and dtor may be
/// called from different thread, so it should be done here (at least in
/// case of no exceptions occurred)
lock.unlock();
} }

View File

@ -0,0 +1,5 @@
DROP TABLE IF EXISTS underlying_01796;
CREATE TABLE underlying_01796 (key UInt64) Engine=Log();
INSERT INTO FUNCTION remote('127.1', currentDatabase(), underlying_01796) SELECT toUInt64(number) FROM system.numbers LIMIT 1;
SELECT * FROM underlying_01796 FORMAT Null;
DROP TABLE underlying_01796;