David: Thanks for your help and time!<br><br>Norbert (openDBX author) just just tell me this is ok, but checking with PQisBusy() again shouldn't be necessary. So, it was simplified and commited to svn.<br><br>Actually now, it is like this:<br>
<br><pre>#ifdef HAVE_SELECT<br>        if( timeout != NULL && PQisBusy( (PGconn*) handle->generic ) == 1 )<br>        {<br>                int fd, err;<br>                fd_set fds;<br><br>                if( ( fd = PQsocket( (PGconn*) handle->generic ) ) == -1 )<br>
                {<br>                        conn->errtype = -1;<br>                        return -ODBX_ERR_BACKEND;<br>                }<br><br>                FD_ZERO( &fds );<br>                FD_SET( fd, &fds );<br><br>                while( ( err = select( fd + 1, &fds, NULL, NULL, timeout ) ) < 0 && errno == EINTR );<br>
<br>                switch( err )<br>                {<br>                        case -1:<br>                                return -ODBX_ERR_RESULT;<br>                        case 0:<br>                                return ODBX_RES_TIMEOUT; /* timeout while waiting for a result */<br>                }<br>        }<br>#endif<br></pre>I test it and works like a charm.<br>
<br>thanks again.<br><br>
Mariano<br><br><div class="gmail_quote">On Wed, Jan 28, 2009 at 7:19 PM, David T. Lewis <span dir="ltr"><<a href="mailto:lewis@mail.msen.com" target="_blank">lewis@mail.msen.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div>On Wed, Jan 28, 2009 at 12:51:04AM -0200, Mariano Martinez Peck wrote:<br>
><br>
> So, what I change openDBX code from this:<br>
><br>
> if( ( fd = PQsocket( (PGconn*) handle->generic ) ) == -1 )<br>
> {<br>
> conn->errtype = -1;<br>
> return -ODBX_ERR_BACKEND;<br>
> }<br>
><br>
> FD_ZERO( &fds );<br>
> FD_SET( fd, &fds );<br>
><br>
> switch( select( fd + 1, &fds, NULL, NULL, timeout ) )<br>
><br>
><br>
><br>
> to<br>
><br>
><br>
> do {<br>
><br>
> if( ( fd = PQsocket( (PGconn*) handle->generic ) ) == -1 )<br>
> {<br>
> conn->errtype = -1;<br>
> return -ODBX_ERR_BACKEND;<br>
> }<br>
><br>
> FD_ZERO( &fds );<br>
> FD_SET( fd, &fds );<br>
><br>
> rv = select( fd + 1, &fds, NULL, NULL, timeout );<br>
><br>
> } while ((rv == -1) && (errno == EINTR));<br>
><br>
> switch( rv )<br>
><br>
><br>
> And now It works perfect. It was difficult to reproduce because openDBX<br>
> tests where ok, but squeakDBX ones not. This is because of SqueakVM as you<br>
> explain me.<br>
<br>
</div>Your change looks right to me.<br>
<br>
Dave<br>
<br>
<br>
<br>
</blockquote></div><br>