I have applied the following comment patch.  The current code resets the
timer when select() is interruped.  On OS's that modify timeout to show
the remaining time, we should be using that value instead of resetting
the timer to its original value on select retry.

---------------------------------------------------------------------------

pgman wrote:
> 
> Oops, overoptimized a little. ptmp_timeout is needed in case no time is
> passed;  ptmp_timeout restored.
> 
> ---------------------------------------------------------------------------
> 
> pgman wrote:
> > Tom Lane wrote:
> > > Bruce Momjian <[EMAIL PROTECTED]> writes:
> > > > That whole remains structure should be a time_t variable, and then we
> > > > _know_ we can't assume it is signed.  The use of timeval should
> > > > happen only in pqWaitTimed because it has to use select().
> > > 
> > > I think it's fine to use struct timeval as the parameter type for
> > > pqWaitTimed.  This particular caller of pqWaitTimed has no need for
> > > sub-second wait precision, but that doesn't mean we might not want it
> > > for other purposes later.
> > 
> > That was a question:  whether pqWaitTimed() was something exported by
> > libpq and therefore something that has an API that shouldn't change.  I
> > see it in libpq-int.h, which I think means it isn't exported, but yes,
> > there could be later cases where we need subsecond stuff.
> > 
> > I have applied the following patch to get us a little closer to sanity.
> 
> -- 
>   Bruce Momjian                        |  http://candle.pha.pa.us
>   [EMAIL PROTECTED]               |  (610) 359-1001
>   +  If your life is a hard drive,     |  13 Roberts Road
>   +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: src/interfaces/libpq/fe-misc.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/libpq/fe-misc.c,v
retrieving revision 1.82
diff -c -c -r1.82 fe-misc.c
*** src/interfaces/libpq/fe-misc.c      14 Oct 2002 17:33:08 -0000      1.82
--- src/interfaces/libpq/fe-misc.c      14 Oct 2002 18:08:14 -0000
***************
*** 824,830 ****
                {
                        /*
                         *      select() may modify timeout argument on some platforms 
so
!                        *      use copy
                         */
                        tmp_timeout = *timeout;
                        ptmp_timeout = &tmp_timeout;
--- 824,835 ----
                {
                        /*
                         *      select() may modify timeout argument on some platforms 
so
!                        *      use copy.
!                        *      XXX Do we really want to do that?  If select() returns
!                        *      the number of seconds remaining, we are resetting
!                        *      the timeout to its original value.  This will yeild
!                        *      incorrect timings when select() is interrupted.
!                        *      bjm 2002-10-14
                         */
                        tmp_timeout = *timeout;
                        ptmp_timeout = &tmp_timeout;

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to