アクセス違反で落ちるバグが直った

直った!

今日会社で暇だったので、脳内にあるポエニーのソースでどこがバグっているのかずーと考えてて、めちゃ怪しい部分を発見したので、家に帰ってから罠(assert)を仕掛けておいたんですよ。
そして、ずーと起動しておいたら、たった今、罠にかかりました。
いやー、こんなバグ気づかないよ。マジで!
なんたってね、データコネクションから来たコマンドを処理して、その結果、それがクローズコマンドだったときに、下流検索ノードのテーブルへそのコネクションを消しに行っていて(テーブルが違う)、しかもテーブルの削除処理でレコードが存在しない場合の処理がバグって、2分木が壊れて、次のforeachから呼び出されるopApplyの中で落ちていました。
また、そのとき排他がかかっていないので、同時に下流検索ノードのテーブルが更新されると、途中で木の変な経路へ探索していって落ちるパターンもあったようです。(予想)

くだらな・・。GC関係ないです。ごめんなさい。

これで、全部直ってくれればうれしい。

ちなみに怪しいと思った箇所は、レコード削除関数の中で、存在チェックをした後、存在していたらコネクションをクローズして、その後存在の有無に関わらず削除に行っていた処理です。
昨日の時点で、btreeが変だってのは気づいていて、キーがないことがあるのかな・・とは思っていたけど、まさか別のテーブルに消しにいってるとは・・・。