Improvements to ps message of startup process during Hot Standby.
authorSimon Riggs <[email protected]>
Sat, 13 Feb 2010 16:29:38 +0000 (16:29 +0000)
committerSimon Riggs <[email protected]>
Sat, 13 Feb 2010 16:29:38 +0000 (16:29 +0000)
Message is reset earlier and potential bug avoided.

Andres Freund

src/backend/storage/ipc/standby.c

index e30b5d1809c68e24e5180973be1ec8e39f665f03..c8fde2fd671881a0004803ad0a9cc1342da59d8a 100644 (file)
@@ -164,6 +164,7 @@ ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
                                       ProcSignalReason reason)
 {
    char        waitactivitymsg[100];
+   char        oldactivitymsg[101];
 
    while (VirtualTransactionIdIsValid(*waitlist))
    {
@@ -186,17 +187,21 @@ ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
            TimestampDifference(waitStart, now, &wait_s, &wait_us);
            if (!logged && (wait_s > 0 || wait_us > 500000))
            {
-               const char *oldactivitymsg;
+               const char *oldactivitymsgp;
                int         len;
 
-               oldactivitymsg = get_ps_display(&len);
+               oldactivitymsgp = get_ps_display(&len);
+
+               if (len > 100)
+                   len = 100;
+
+               memcpy(oldactivitymsg, oldactivitymsgp, len);
+               oldactivitymsg[len] = 0;
+
                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);
 
@@ -226,7 +231,7 @@ ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
        /* Reset ps display */
        if (logged)
        {
-           set_ps_display(waitactivitymsg, false);
+           set_ps_display(oldactivitymsg, false);
            pgstat_report_waiting(false);
        }