haskell-jp / random #90 at 2021-04-22 14:34:09 +0900

どうも buffer overrun を起こして、GCのデータを壊しているっぽい。
私は使ったことがないのですが、GC時の不整合であれば、sanityチェックオプション(-DS)でチェックできるという話を聞いたことがあります。
https://gitlab.haskell.org/ghc/ghc/-/wikis/debugging/runtime-system#debugging-the-runtime-system
https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/rts/sanity#sanity-checking
@takenobu.hs ありがとうございます。
gdb の中で -DS で走らせてみました。
spec: internal error: ASSERTION FAILED: file rts/sm/Sanity.c, line 740
とか
spec: internal error: ASSERTION FAILED: file rts/sm/Scav.c, line 1606
とか言われます。
やはり、buffer overrun を疑っています。
@takenobu.hs memset が buffer overrun している箇所を発見し、めでたく修正できました。間違っていた箇所はテストコードで CI は確率的に失敗するが、フィールドテストしているサーバーでは問題が起きない点がやっかいでした。