Thread: Re: [HACKERS] pg_arch.c call to sleep()

Re: [HACKERS] pg_arch.c call to sleep()

From
Andrew Dunstan
Date:

Magnus Hagander wrote:

>>>We have the following warning on Windows:
>>>pgarch.c:349: warning: implicit declaration of function `sleep'
>>>
>>>
>>>To fix it we could include the right header (which appears to be
>>><stdlib.h> in the Windows/Mingw case), or we could replace
>>>
>>>
>>the call by
>>
>>
>>>a call to pg_usleep().
>>>
>>>
>><stdlib.h> is included automatically by c.h, so that surely
>>won't fix it.
>>
>>I have some recollection that we invented pg_usleep in part
>>because we wanted to not use sleep() at all in the backend,
>>but I don't recall why (and the reasoning might not apply to
>>the archiver process, anyway).
>>
>>
>
>win32 signal handling won't interrupt sleep(), just pg_usleep().
>
>
>
>

I take this as confirmation that calling pg_usleep is the Right Thing (tm).

Here's the patch.

cheers

andrew
Index: pgarch.c
===================================================================
RCS file: /home/cvsmirror/pgsql/src/backend/postmaster/pgarch.c,v
retrieving revision 1.9
diff -c -r1.9 pgarch.c
*** pgarch.c    29 Aug 2004 05:06:46 -0000    1.9
--- pgarch.c    8 Nov 2004 12:59:49 -0000
***************
*** 338,352 ****

          /*
           * There shouldn't be anything for the archiver to do except to
!          * wait for a signal, so we could use pause(3) here... ...however,
!          * the archiver exists to protect our data, so she wakes up
!          * occasionally to allow herself to be proactive. In particular
!          * this avoids getting stuck if a signal arrives just before we
!          * enter sleep().
           */
          if (!wakened)
          {
!             sleep(PGARCH_AUTOWAKE_INTERVAL);

              curtime = time(NULL);
              if ((unsigned int) (curtime - last_copy_time) >=
--- 338,351 ----

          /*
           * There shouldn't be anything for the archiver to do except to
!          * wait for a signal, ... however, the archiver exists to
!          * protect our data, so she wakes up occasionally to allow
!          * herself to be proactive. In particular this avoids getting
!          * stuck if a signal arrives just before we sleep.
           */
          if (!wakened)
          {
!             pg_usleep(PGARCH_AUTOWAKE_INTERVAL * 1000000L);

              curtime = time(NULL);
              if ((unsigned int) (curtime - last_copy_time) >=

Re: [HACKERS] pg_arch.c call to sleep()

From
Tom Lane
Date:
Andrew Dunstan <andrew@dunslane.net> writes:
> I take this as confirmation that calling pg_usleep is the Right Thing (tm).
> Here's the patch.

Applied.

            regards, tom lane

Re: [HACKERS] pg_arch.c call to sleep()

From
Andrew Dunstan
Date:

Tom Lane wrote:

>Andrew Dunstan <andrew@dunslane.net> writes:
>
>
>>I take this as confirmation that calling pg_usleep is the Right Thing (tm).
>>Here's the patch.
>>
>>
>
>Applied.
>
>
>
>

Darnit, I caught one and not the other. Here's a oneline fix.

cheers

andrew
Index: src/backend/postmaster/pgarch.c
===================================================================
RCS file: /home/cvsmirror/pgsql/src/backend/postmaster/pgarch.c,v
retrieving revision 1.11
diff -c -r1.11 pgarch.c
*** src/backend/postmaster/pgarch.c    17 Nov 2004 17:50:20 -0000    1.11
--- src/backend/postmaster/pgarch.c    18 Nov 2004 16:57:10 -0000
***************
*** 392,398 ****
                                      xlog)));
                      return;        /* give up archiving for now */
                  }
!                 sleep(1);        /* wait a bit before retrying */
              }
          }
      }
--- 392,398 ----
                                      xlog)));
                      return;        /* give up archiving for now */
                  }
!                 pg_usleep(1000000L);    /* wait 1 sec before retrying */
              }
          }
      }

Re: [HACKERS] pg_arch.c call to sleep()

From
Tom Lane
Date:
Andrew Dunstan <andrew@dunslane.net> writes:
> Darnit, I caught one and not the other. Here's a oneline fix.

Done.

            regards, tom lane