Re: Small Bug in pgstat display during recovery conflict resolution

From: Simon Riggs <simon(at)2ndQuadrant(dot)com>
To: Andres Freund <andres(at)anarazel(dot)de>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Small Bug in pgstat display during recovery conflict resolution
Date: 2010-02-13 16:30:36
Message-ID: 1266078636.7341.7795.camel@ebony
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Committed, thanks.

On Sun, 2010-02-07 at 21:47 +0100, Andres Freund wrote:
> Hi Simon, Hi all,
>
>
> if (!logged && (wait_s > 0 || wait_us > 500000))
> {
> const char *oldactivitymsg;
> int len;
>
> oldactivitymsg = get_ps_display(&len);
> snprintf(waitactivitymsg, sizeof(waitactivitymsg),
> "waiting for max_standby_delay (%u s)",
> MaxStandbyDelay);
> set_ps_display(waitactivitymsg, false);
> if (len > 100)
> len = 100;
> memcpy(waitactivitymsg, oldactivitymsg, len);
>
> pgstat_report_waiting(true);
>
> logged = true;
> }
> ..
> if (logged)
> {
> set_ps_display(waitactivitymsg, false);
> pgstat_report_waiting(false);
> }
>
> That doesnt work because get_ps_display returns the internal buffer. This
> leads to the situation that after conflict resolution the
> "waiting for max_standby_delay ..."
> message is displayed until the next segment starts where its replaced
> again by the
> "... recovering ..." line.
>
> Additionally the old code may print unintialized memory if get_ps_display
> returns a string without a \0 terminator.
>
> The attached patch fixes that.
>
> Andres
--
Simon Riggs www.2ndQuadrant.com

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Markus Wanner 2010-02-13 16:39:42 Re: Testing with concurrent sessions
Previous Message Andrew Dunstan 2010-02-13 14:32:31 Re: Package namespace and Safe init cleanup for plperl [PATCH]