diff options
author | sskvor <sskvor@yandex-team.com> | 2022-11-10 12:04:05 +0300 |
---|---|---|
committer | sskvor <sskvor@yandex-team.com> | 2022-11-10 12:04:05 +0300 |
commit | 6d5ed9f0166178823f3a752bfe46dd7ef5042df8 (patch) | |
tree | 431a578de9d75353b8e60f85d49e74d2370fedf7 /library/cpp/monlib/exception/exception.cpp | |
parent | 56418f7c4453670d9fae2c1329fe38c5d81d4563 (diff) | |
download | ydb-6d5ed9f0166178823f3a752bfe46dd7ef5042df8.tar.gz |
[util] Terminate instead of deadlock after fork with running thread pools
Контекст. В древнем странном коде обнаружили, что если создавать `TThreadPool` часто и конкуретно с запуском `TShellCommand`, то иногда последняя дедлочится: если начали выполнять конструктор `TThreadPool` и регистрацию в `TAtforkQueueRestarter`, захватив `TAtforkQueueRestarter::ActionMutex`, а в другом потоке параллельно сделали `fork`, то последний может форкнуться с залоченым мьютексом. Первым делом происходит вызов коллбеков из `pthread_atfork`, где мьютекс лочится заново.
Конечно, форкаться в сложных программах с тредпулами категорически запрещено, но, подозреваю, много кода в аркадии так написано. Давайте как-то защитимся от такого.
Diffstat (limited to 'library/cpp/monlib/exception/exception.cpp')
0 files changed, 0 insertions, 0 deletions