The test suite uses setEnv in several places. (No other part of git-annex does, basically.) However, setEnv is not thread safe, if another thread runs getEnv at the same time it can crash. Or another setEnv, probably.

This actually does segfault the test suite runners from time to time. The test suite currently notices if there was a segfault and re-runs it. While that works well enough, it's always possible there could be some other behavior than just a segfault.

See https://gitlab.haskell.org/ghc/ghc/-/issues/21243 for a test case and some analysis. See also https://github.com/UnkindPartition/tasty/issues/326. Tasty uses getEnv, and that can apparently run while a test case is using setEnv.

The main places that setEnv is used are in setTestMode. Fixing it will mean plumbing a value all through the test suite. Or perhaps, using a single toplevel MVar would be ok, since tests don't run concurrently?

There is also Utility.Gpg.testHarness, which sets GNUPGHOME. It seems that instead, every place that git-annex is run inside the gpg test harness would need to add GNUPGHOME to the environment of the git-annex process.

fixed --Joey