1111 * Portions Copyright (c) 1994, Regents of the University of California
1212 *
1313 * IDENTIFICATION
14- * $PostgreSQL: pgsql/src/backend/storage/ipc/standby.c,v 1.12 2010/02/13 01:32:19 sriggs Exp $
14+ * $PostgreSQL: pgsql/src/backend/storage/ipc/standby.c,v 1.13 2010/02/13 16:29:38 sriggs Exp $
1515 *
1616 *-------------------------------------------------------------------------
1717 */
@@ -164,6 +164,7 @@ ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
164164 ProcSignalReason reason )
165165{
166166 char waitactivitymsg [100 ];
167+ char oldactivitymsg [101 ];
167168
168169 while (VirtualTransactionIdIsValid (* waitlist ))
169170 {
@@ -186,17 +187,21 @@ ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
186187 TimestampDifference (waitStart , now , & wait_s , & wait_us );
187188 if (!logged && (wait_s > 0 || wait_us > 500000 ))
188189 {
189- const char * oldactivitymsg ;
190+ const char * oldactivitymsgp ;
190191 int len ;
191192
192- oldactivitymsg = get_ps_display (& len );
193+ oldactivitymsgp = get_ps_display (& len );
194+
195+ if (len > 100 )
196+ len = 100 ;
197+
198+ memcpy (oldactivitymsg , oldactivitymsgp , len );
199+ oldactivitymsg [len ] = 0 ;
200+
193201 snprintf (waitactivitymsg , sizeof (waitactivitymsg ),
194202 "waiting for max_standby_delay (%u s)" ,
195203 MaxStandbyDelay );
196204 set_ps_display (waitactivitymsg , false);
197- if (len > 100 )
198- len = 100 ;
199- memcpy (waitactivitymsg , oldactivitymsg , len );
200205
201206 pgstat_report_waiting (true);
202207
@@ -226,7 +231,7 @@ ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
226231 /* Reset ps display */
227232 if (logged )
228233 {
229- set_ps_display (waitactivitymsg , false);
234+ set_ps_display (oldactivitymsg , false);
230235 pgstat_report_waiting (false);
231236 }
232237
0 commit comments