Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 05 Jul 1999 20:59:51 +1000
From:      Stephen McKay <syssgm@detir.qld.gov.au>
To:        Kirk McKusick <mckusick@FreeBSD.org>
Cc:        cvs-committers@freebsd.org, cvs-all@FreeBSD.org, syssgm@detir.qld.gov.au
Subject:   Re: cvs commit: src/sys/i386/i386 machdep.c src/sys/kern vfs_bio.c vfs_subr.c src/sys/sys buf.h kernel.h proc.h src/sys/vm vm_pageout.c vm_pager.c 
Message-ID:  <199907051059.UAA24859@nymph.detir.qld.gov.au>
In-Reply-To: <199907040025.RAA83209@freefall.freebsd.org> from Kirk McKusick at "Sat, 03 Jul 1999 17:25:39 -0700"
References:  <199907040025.RAA83209@freefall.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Saturday, 3rd July 1999, Kirk McKusick wrote:

>  A small race condition was fixed in getpbuf() in vm/vm_pager.c.

That's one butt ugly goto!  Here is my suggested (untested) reformatting:


Index: vm_pager.c
===================================================================
RCS file: /cvs/src/sys/vm/vm_pager.c,v
retrieving revision 1.50
diff -u -c -r1.50 vm_pager.c
*** vm_pager.c	1999/07/04 00:25:38	1.50
--- vm_pager.c	1999/07/05 10:50:41
***************
*** 377,394 ****
  
  	s = splvm();
  
! retry:
! 	if (pfreecnt) {
! 		while (*pfreecnt == 0) {
! 			tsleep(pfreecnt, PVM, "wswbuf0", 0);
  		}
- 	}
  
! 	/* get a bp from the swap buffer header pool */
! 	while ((bp = TAILQ_FIRST(&bswlist)) == NULL) {
  		bswneeded = 1;
  		tsleep(&bswneeded, PVM, "wswbuf1", 0);
! 		goto retry;	/* loop in case someone else grabbed one */
  	}
  	TAILQ_REMOVE(&bswlist, bp, b_freelist);
  	if (pfreecnt)
--- 377,396 ----
  
  	s = splvm();
  
! 	for (;;) {
! 		if (pfreecnt) {
! 			while (*pfreecnt == 0) {
! 				tsleep(pfreecnt, PVM, "wswbuf0", 0);
! 			}
  		}
  
! 		/* get a bp from the swap buffer header pool */
! 		if ((bp = TAILQ_FIRST(&bswlist)) != NULL)
! 			break;
! 
  		bswneeded = 1;
  		tsleep(&bswneeded, PVM, "wswbuf1", 0);
! 		/* loop in case someone else grabbed one */
  	}
  	TAILQ_REMOVE(&bswlist, bp, b_freelist);
  	if (pfreecnt)


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199907051059.UAA24859>