Thread: pg_regress not waiting for postmaster to stop

pg_regress not waiting for postmaster to stop

From
Michael Paquier
Date:
Hi all,

In pg_regress.c, there is the following code:
static void
stop_postmaster(void)
{
        if (postmaster_running)
        {
                /* We use pg_ctl to issue the kill and wait for stop */
                char            buf[MAXPGPATH * 2];
                int                     r;

                /* On Windows, system() seems not to force fflush, so... */
                fflush(stdout);
                fflush(stderr);

                snprintf(buf, sizeof(buf),
                                 "\"%s%spg_ctl\" stop -D \"%s/data\"
-w -s -m fast",
                                 bindir ? bindir : "",
                                 bindir ? "/" : "",
                                 temp_instance);

Except if I am missing something, the comment mentions that we should
wait for the stop but there is no -w switch in the command of pg_ctl.
Doesn't the patch attached make sense?
Regards
--
Michael

Attachment

Re: pg_regress not waiting for postmaster to stop

From
Robert Haas
Date:
On Fri, Jun 19, 2015 at 2:33 AM, Michael Paquier
<michael.paquier@gmail.com> wrote:
> In pg_regress.c, there is the following code:
> static void
> stop_postmaster(void)
> {
>         if (postmaster_running)
>         {
>                 /* We use pg_ctl to issue the kill and wait for stop */
>                 char            buf[MAXPGPATH * 2];
>                 int                     r;
>
>                 /* On Windows, system() seems not to force fflush, so... */
>                 fflush(stdout);
>                 fflush(stderr);
>
>                 snprintf(buf, sizeof(buf),
>                                  "\"%s%spg_ctl\" stop -D \"%s/data\"
> -w -s -m fast",
>                                  bindir ? bindir : "",
>                                  bindir ? "/" : "",
>                                  temp_instance);
>
> Except if I am missing something, the comment mentions that we should
> wait for the stop but there is no -w switch in the command of pg_ctl.
> Doesn't the patch attached make sense?

Do we need to wait, or is failing to wait harmless?

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



Re: pg_regress not waiting for postmaster to stop

From
Tom Lane
Date:
Michael Paquier <michael.paquier@gmail.com> writes:
> Except if I am missing something, the comment mentions that we should
> wait for the stop but there is no -w switch in the command of pg_ctl.
> Doesn't the patch attached make sense?

Per pg_ctl's help output:

(The default is to wait for shutdown, but not for start or restart.)

So -w is already the default in a stop call.  Perhaps it would be worth
adding it for documentation's sake, but there's no bug here AFAICS.
        regards, tom lane



Re: pg_regress not waiting for postmaster to stop

From
Andrew Dunstan
Date:
On 06/19/2015 02:33 AM, Michael Paquier wrote:
> Hi all,
>
> In pg_regress.c, there is the following code:
> static void
> stop_postmaster(void)
> {
>          if (postmaster_running)
>          {
>                  /* We use pg_ctl to issue the kill and wait for stop */
>                  char            buf[MAXPGPATH * 2];
>                  int                     r;
>
>                  /* On Windows, system() seems not to force fflush, so... */
>                  fflush(stdout);
>                  fflush(stderr);
>
>                  snprintf(buf, sizeof(buf),
>                                   "\"%s%spg_ctl\" stop -D \"%s/data\"
> -w -s -m fast",
>                                   bindir ? bindir : "",
>                                   bindir ? "/" : "",
>                                   temp_instance);
>
> Except if I am missing something, the comment mentions that we should
> wait for the stop but there is no -w switch in the command of pg_ctl.
> Doesn't the patch attached make sense?



-w is the default for stop.

So the patch shouldn't make any difference.

cheers

andrew