インディ10:
2つのスレッド、スレッド1はTIdHTTPでGetを呼び出し、データの読み取りをブロックしています。スレッド2は、Getを中断するために、同じTIdHTTPでdisconnectを呼び出します。
TIdHTTPでダイジェスト認証を使用していますが、ときどきAVを取得します。
スレッド1のコールスタック:
40491D [system.pas][System][@ClassDestroy][8989]
69EF2B [..\..\common\IdAuthenticationDigest.pas][IdAuthenticationDigest][TIdDigestAuthentication.Destroy][109]
404567 [system.pas][System][TObject.Free][8313]
6A2B69 [..\..\Common\IdHTTP.pas][IdHTTP][TIdCustomHTTP.DoOnDisconnected][1587]
534574 [IdTCPConnection.pas][IdTCPConnection][TIdTCPConnection.Disconnect][532]
534B3B [IdTCPConnection.pas][IdTCPConnection][TIdTCPConnection.Disconnect][767]
6A3FB3 [..\..\Common\IdHTTP.pas][IdHTTP][TIdCustomHTTP.DoRequest][2101]
スレッド2のコールスタック:
402BA3 [system.pas][System][@FreeMem][2477]
404521 [system.pas][System][TObject.FreeInstance][8294]
40491D [system.pas][System][@ClassDestroy][8989]
69EF2B [..\..\common\IdAuthenticationDigest.pas][IdAuthenticationDigest] [TIdDigestAuthentication.Destroy][109]
404567 [system.pas][System][TObject.Free][8313]
6A2B69 [..\..\Common\IdHTTP.pas][IdHTTP][TIdCustomHTTP.DoOnDisconnected][1587]
534574 [IdTCPConnection.pas][IdTCPConnection][TIdTCPConnection.Disconnect][532]
534B3B [IdTCPConnection.pas][IdTCPConnection][TIdTCPConnection.Disconnect][767]
基本的に、DoRequestの最後に、切断されます。Request.Authenticationを解放しようとしている切断に競合状態があるようです。
Indy 10の最新のコードをダウンロードし、コードを見ると、動作は同じであるはずです。
別のスレッドからdisconnectを呼び出すことが推奨される使用パターンだと思いますが、間違っていますか?これはインディのバグですか?切断をロックする必要があるようですが、どのようなデッドロックが発生するかを確認するのは困難です。他の誰かがこれに遭遇しましたか?