This patch refactors some code in WaitOnLock slightly. The old code was slow, and I believe it was off-by-one (it allocates one byte of memory more than needed).

Barring any objections I'll apply this to HEAD later today.

-Neil
Index: src/backend/storage/lmgr/lock.c
===================================================================
RCS file: /var/lib/cvs/pgsql/src/backend/storage/lmgr/lock.c,v
retrieving revision 1.147
diff -c -r1.147 lock.c
*** src/backend/storage/lmgr/lock.c	1 Mar 2005 21:14:59 -0000	1.147
--- src/backend/storage/lmgr/lock.c	8 Mar 2005 05:42:06 -0000
***************
*** 1076,1081 ****
--- 1076,1082 ----
  	LockMethod	lockMethodTable = LockMethods[lockmethodid];
  	char	   *new_status,
  			   *old_status;
+ 	size_t		len;
  
  	Assert(lockmethodid < NumLockMethods);
  
***************
*** 1083,1091 ****
  			   locallock->lock, locallock->tag.mode);
  
  	old_status = pstrdup(get_ps_display());
! 	new_status = (char *) palloc(strlen(old_status) + 10);
! 	strcpy(new_status, old_status);
! 	strcat(new_status, " waiting");
  	set_ps_display(new_status);
  
  	awaitedLock = locallock;
--- 1084,1092 ----
  			   locallock->lock, locallock->tag.mode);
  
  	old_status = pstrdup(get_ps_display());
! 	len = strlen(old_status);
! 	new_status = (char *) palloc(len + 8 + 1);
! 	sprintf(new_status, "%s waiting", old_status);
  	set_ps_display(new_status);
  
  	awaitedLock = locallock;
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to