updateNurseryStats is racy
While working on !1603 (closed) I encountered the following race:
SUMMARY: ThreadSanitizer: data race rts/sm/Storage.c:1218 in updateNurseriesStats
==================
==================
WARNING: ThreadSanitizer: data race (pid=11536)
Read of size 8 at 0x558000303948 by thread T9 (mutexes: write M15):
#0 updateNurseriesStats rts/sm/Storage.c:1218 (ffi014+0x000000766262)
#1 stat_startGC rts/Stats.c:315 (ffi014+0x00000073c804)
#2 GarbageCollect rts/sm/GC.c:236 (ffi014+0x0000007569b7)
#3 scheduleDoGC rts/Schedule.c:1806 (ffi014+0x000000735937)
#4 schedule rts/Schedule.c:552 (ffi014+0x000000736b77)
#5 scheduleWaitThread rts/Schedule.c:2549 (ffi014+0x0000007395dd)
#6 rts_evalIO rts/RtsAPI.c:460 (ffi014+0x00000072d201)
#7 zdmainzdMainzdMainzumkFunc <null> (ffi014+0x0000004140d5)
#8 scheduleWaitThread rts/Schedule.c:2549 (ffi014+0x0000007395dd)
#9 rts_evalStableIO rts/RtsAPI.c:511 (ffi014+0x00000072d446)
#10 forkOS_createThreadWrapper rts/posix/OSThreads.c:224 (ffi014+0x000000769483)
#11 <null> <null> (libtsan.so.0+0x000000028d5b)
Previous write of size 8 at 0x558000303948 by main thread:
#0 allocateMightFail rts/sm/Storage.c:961 (ffi014+0x000000764591)
#1 allocate rts/sm/Storage.c:837 (ffi014+0x000000764b20)
#2 createThread rts/Threads.c:83 (ffi014+0x00000074195a)
#3 createStrictIOThread rts/RtsAPI.c:416 (ffi014+0x00000072cf5b)
#4 rts_evalIO rts/RtsAPI.c:459 (ffi014+0x00000072d1f3)
#5 zdmainzdMainzdMainzumkFunc <null> (ffi014+0x0000004140d5)
#6 scheduleWaitThread rts/Schedule.c:2549 (ffi014+0x0000007395dd)
#7 rts_evalLazyIO rts/RtsAPI.c:530 (ffi014+0x00000072d521)
#8 hs_main rts/RtsMain.c:72 (ffi014+0x000000730ab5)
#9 main <null> (ffi014+0x000000414232)
Mutex M15 (0x0000009148e0) created at:
#0 pthread_mutex_init <null> (libtsan.so.0+0x00000002c81e)
#1 initMutex rts/posix/OSThreads.c:170 (ffi014+0x000000769697)
#2 initStorage rts/sm/Storage.c:148 (ffi014+0x0000007638eb)
#3 hs_init_ghc rts/RtsStartup.c:245 (ffi014+0x0000007318e0)
#4 hs_main rts/RtsMain.c:57 (ffi014+0x000000730a8b)
#5 main <null> (ffi014+0x000000414232)
Thread T9 (tid=11697, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x00000002c010)
#1 forkOS_createThread rts/posix/OSThreads.c:234 (ffi014+0x0000007697f3)
#2 base_ControlziConcurrent_forkOS1_info <null> (ffi014+0x0000004169f2)
#3 scheduleWaitThread rts/Schedule.c:2549 (ffi014+0x0000007395dd)
#4 rts_evalLazyIO rts/RtsAPI.c:530 (ffi014+0x00000072d521)
#5 hs_main rts/RtsMain.c:72 (ffi014+0x000000730ab5)
#6 main <null> (ffi014+0x000000414232)
SUMMARY: ThreadSanitizer: data race rts/sm/Storage.c:1218 in updateNurseriesStats