Я написал правило для запуска некоторого компилятора (Synopsys VCS MX). При запуске одной цели все отлично работает. При одновременном запуске нескольких целей компилятор сталкивается с ошибкой сегментации. Этого не происходит при запуске Bazel с --spawn_strategy=local
. Также работает настройка --jobs 1
.
Единственная причина, по которой я могу думать, это то, что компилятор пытается записать в файл с абсолютным путем, сталкиваясь с другими его экземплярами.
У меня следующие вопросы:
- Если бы моя теория была правильной, не возникла бы проблема независимо от погоды, в которой я играю в песочнице, или нет?
- Если я ошибаюсь Как могли компиляторы конфликтовать, если бы не какой-то общий файл?
- Скажите, что для каждой песочницы я хотел смонтировать
/tmp
, который указывает на другой каталог, это было бы возможно?
Обновление : Согласно тому, что я видел в strace
, оба экземпляра компилятора открывают файл /tmp/vcs_20200428163636_3/v710_tok
для чтения и записи, и в какой-то момент вызывает один экземпляр pread64()
который вызывает segfault. Обратите внимание на имя файла, которое выглядит подозрительно как дата, намекающая на то, что была предпринята попытка получить уникальное имя файла, но оба экземпляра не были выполнены достаточно далеко друг от друга.
Вопрос 1 и 3 все еще стоят.