2006-05-26 [長年日記]

[Q3] 同期中にハングアップする

QsMLで指摘のあった同期中にハングアップすることがある件を調べてみました。

同期中のハングアップでもっとも良くあるのは、同期スレッドがアカウントのロックを保持したままUI関係のWindows APIを呼んでしまう、というものです。これをやると、UIスレッドのメッセージループ内でアカウントのロックを確保しようとしてデッドロックしてしまいます。以前のバグもこれが原因でした。どのAPIがロックを確保するのかよくわからないので、気づくとやってしまっていることがあります。

もう一つは、同期スレッドがクラッシュしてしまう、というものです。Windows CEでスレッドがクラッシュするとエラーメッセージも何も出ずにそのまま続行してしまうことがあります。このとき獲得したロックは開放されないので、そのロックを取得しようとしているスレッドは永遠に止まってしまいます。

で、今回は後者のケースらしきものを見つけたので修正してみました。


トップ «前の日記(2006-05-25) 最新 次の日記(2006-05-27)»