On 12/12/2014 12:31 PM, Gaurav Srivastava wrote:
> Hi All,
>
> In ODBC library later to change done as part of commit Title "Rip out
> broken retry/timeout logic in SOCK_wait_for_ready." in file socket.c
>
> Now the cpde snippet for SOCK_wait_for_ready() is like:
>
> do {
> #ifdef HAVE_POLL
> fds.fd = sock->socket;
> fds.events = output ? POLLOUT : POLLIN;
> fds.revents = 0;
> * ret = poll(&fds, 1, nowait ? 0 : -1); *
> mylog("!!! poll ret=%d revents=%x\n", ret, fds.revents);
> #else
> FD_ZERO(&fds);
> FD_ZERO(&except_fds);
> FD_SET(sock->socket, &fds);
> FD_SET(sock->socket, &except_fds);
> if (nowait)
> {
> tm.tv_sec = 0;
> tm.tv_usec = 0;
> }
> ret = select((int) sock->socket + 1, output ? NULL : &fds,
> output ? &fds : NULL, &except_fds, nowait ? &tm : NULL);
> #endif /* HAVE_POLL */
> gerrno = SOCK_ERRNO;
> } *while (ret < 0 && EINTR == gerrno);*
>
>
>
> So whenever there is no fd is ready to be read it will immediately return
> and solve the issue of infinite query hung but due to immediate return it
> will go for continuous retries and causing CPU to shoot very high.This is
> one of the case we are suffering in our scenario after upgrading ODBC.
Why do you think it will go into continuous retries?
- Heikki