[pgsql-jp: 34161] Re: pgpoolのリードエラーについて

Kenichirou Kimura (木村健一郎) kimura @ project-com.com
2004年 10月 26日 (火) 17:06:36 JST


木村です。

At Tue, 26 Oct 2004 16:19:44 +0900,
> > > ERROR: pid 3254: pool_check_fd: data is not ready tp->tv_sec 0
> > > tp->tp_usec 0
> > 
> > このメッセージが出たときのタイミングを教えてください.要は,tp->tv_sec
> > 0かつtp->tp_usec 0になるのはおかしいので,どういうときにこうなるのか知
> > りたいのです.
> > 
> 

ここに便乗してなんですが、このメッセージを出してる該当部分のコードが以
下のようになってますが(in pool_process_query.c)

fds = select(fd+1, &readmask, NULL, &exceptmask, tp);

if (fds == -1)
{
	if (errno == EAGAIN || errno == EINTR)
		continue;

	pool_error("pool_check_fd: select() failed. reason %s", strerror(errno));
	break;
}

if (FD_ISSET(fd, &exceptmask))
{
	pool_error("pool_check_fd: exception occurred");
	break;
}

if (fds == 0)
{
	pool_error("pool_check_fd: data is not ready tp->tv_sec %d tp->tp_usec %d", tp->tv_sec, tp->tv_usec);
	break;
}

selectから帰ってきたときのtpの値って、未定義と見なすべきという話だった
ように思います(Linuxだと実装が違うんですけど)。

参考:
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html

とはいえselectの返り値であるfdsが0にはなってるので、エラーの原因は別の
所にありそうですね。

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
木村健一郎



pgsql-jp メーリングリストの案内