[pgsql-jp: 31728] Re: TCP/IP 接続時、約32k以上のデータを select すると止まる。
hirohito @ murata.co.jp
hirohito @ murata.co.jp
2003年 12月 8日 (月) 18:01:22 JST
> で、つい忘れてしまっていたのですが、問題のサーバだけ ssl=true でした。
> SSLが絡むと、当方の環境では現象が発生するということみたいです。
SSLとは、気がつきませんでした。
私は、SSLは使ったことがなかったもので。
manualを参考に自筆署名の証明書を作り、テストしたところ再現しました。
gdbにかけて、黙りになったところで interrupt & back traceした結果、
SSL通信で無限ループしてる箇所がありました。
SSL_read()が、データがもう無いよと言っているのに、libpq側が、
データをずっと読み続けようとしていたのが原因です。
libpqに以下のpatchを当てて、コンパイルし直すと直ると思います。
*** src/interfaces/libpq/fe-secure.c.orig Fri Apr 11 08:03:13 2003
--- src/interfaces/libpq/fe-secure.c Mon Dec 8 17:28:18 2003
***************
*** 269,274 ****
--- 269,276 ----
case SSL_ERROR_NONE:
break;
case SSL_ERROR_WANT_READ:
+ n = 0;
+ break;
case SSL_ERROR_WANT_WRITE:
/* XXX to support nonblock I/O, we should return 0 here */
goto rloop;
また、この不具合は、最新版(postgresql-7.4)では、すでに修正されているようです。
--
ひろひと
pgsql-jp メーリングリストの案内