aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/deprecated/enum_codegen/enum_codegen_ut.cpp
diff options
context:
space:
mode:
authorsskvor <sskvor@yandex-team.com>2022-11-10 12:04:05 +0300
committersskvor <sskvor@yandex-team.com>2022-11-10 12:04:05 +0300
commit6d5ed9f0166178823f3a752bfe46dd7ef5042df8 (patch)
tree431a578de9d75353b8e60f85d49e74d2370fedf7 /library/cpp/deprecated/enum_codegen/enum_codegen_ut.cpp
parent56418f7c4453670d9fae2c1329fe38c5d81d4563 (diff)
downloadydb-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/deprecated/enum_codegen/enum_codegen_ut.cpp')
0 files changed, 0 insertions, 0 deletions