JDimproved / JDim

2ch browser for linux
https://jdimproved.github.io/JDim/
GNU General Public License v2.0
44 stars 11 forks source link

読み込みを中止しても通信がキャンセルされない #1281

Closed ma8ma closed 9 months ago

ma8ma commented 9 months ago

読み込みを中止しても通信がキャンセルされない

バグの説明

板やスレの読み込みを中止しても通信がキャンセルされないことがあります。

再現の方法

  1. サーバーの負荷が高くなっている板を開く 参考: https://ss1.xrea.com/z4s85ttt.s1007.xrea.com/5chkanshi/disp_status.php
  2. 読み込みしている最中に読み込み中止のボタンやメニューを選択する
  3. キャンセルされない

やりたかったこと・期待する結果

読み込み中止を選択したら通信をキャンセルする

スクリーンショット

なし

動作環境

[バージョン] JDim 0.10.1-20231028(git:f9e04c4ce6)
[ディストリ ] Ubuntu 23.04 (x86_64)
[パッケージ] バイナリ/ソース( <配布元> )
[ DE/WM ] KDE
[ gtkmm  ] 3.24.7
[ glibmm  ] 2.66.6
[ TLS lib ] GnuTLS 3.7.8
[オプション ] '--with-alsa''--with-pangolayout'
[ そ の 他 ] 

追加の情報

select(2)やpoll(2)にあるバグの影響と思われます。 https://linuxjm.osdn.jp/html/LDP_man-pages/man2/select.2.html

linuxではselect(2)やpoll(2)を使ってsocketのファイルディスクリプタを待つと読み込みの準備完了ができたと通知がきた場合でも読み込みがブロックされることがあるとマニュアルに書かれています。 間違った準備完了でIO待機を抜ける状況では読み込みブロックとIO待機でループして読み込み中止の確認が不能になっている疑いがあります。

ma8ma commented 9 months ago

今回の件に直接関係ありませんがネットワークに関してコメントします。

通信部分はHTTPに加えて下のレイヤーにあるソケット通信を自前で実装して処理していますがメンテナンスが難しくHTTPライブラリへの置き換えを構想しています。 ライブラリはlibsoup3、libcurlを候補として見ています。規模や影響が大きいため修正変更の案をRFCにまとめて折を見て提案したいと考えてます。