2006/01/14
AirOneの(たぶん)version1の頃からあるバグを修正
AirOneに3年以上前からあるバグを見つけました。
以前、「イベントドリブンとマルチスレッドの相性の悪さ(http://dev.ariel-networks.com/blog/inoue.php?blogid=2&archive=2004-4-15)」という記事を書きました。 今回直したバグはまさにこのパターンです。
イベントコールバック関数に入ってすぐに排他制御のためにロックをしていましたが、ロック獲得の直前に別スレッドに割り込まれて、割り込んだスレッドが運悪くある条件を満たすと、AirOneがクラッシュします。
3年以上潜伏し続けたバグだけに、起きる確率はかなり低いものです。しかし、最近、少しだけ起きる確率が上がった可能性があり、発見につながりました。 上で説明したイベントは通信セッションの破棄にいたるイベントで、割り込んだ別スレッドが運悪く満たす条件は、停止中の通信セッションの再利用です。ネットワーク利用の効率化を進めるなかで、通信セッションを再利用する確率が上がったのでしょう。
微妙なタイミングのバグなので修正に手こずりました。修正をコミットしましたが、いまいち汚い直し方でした(昨日の夜)。 今日起きると、もう少しまともな書き方を思いつきました。リリース前なので、コミットは後回しです。
- Category(s)
- カテゴリなし
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/inoue/airone-bugfix/tbping