diff options
author | bde <bde@FreeBSD.org> | 1998-11-19 06:20:42 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 1998-11-19 06:20:42 +0000 |
commit | 9094f7c05e564ba1faf25d35a89ac210d2daff2b (patch) | |
tree | 4d5732bee160daa2203e7bcdabd675d52ecea0e5 /sys/vm/swap_pager.c | |
parent | bd073938e95cc12ae08984609dab55ed0f3964e9 (diff) | |
download | FreeBSD-src-9094f7c05e564ba1faf25d35a89ac210d2daff2b.zip FreeBSD-src-9094f7c05e564ba1faf25d35a89ac210d2daff2b.tar.gz |
Fixed a null pointer panic in spc_free(). swap_pager_putpages()
almost always causes this panic for the curproc != pageproc case.
This case apparently doesn't happen in normal operation, but it
happens when vm_page_alloc_contig() is called when there is a memory
hogging application that hasn't already been paged out.
PR: 8632
Reviewed by: info@opensound.com (Dev Mazumdar), dg
Broken in: rev.1.89 (1998/02/23)
Diffstat (limited to 'sys/vm/swap_pager.c')
-rw-r--r-- | sys/vm/swap_pager.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index bd470dc..62733c9 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -39,7 +39,7 @@ * from: Utah $Hdr: swap_pager.c 1.4 91/04/30$ * * @(#)swap_pager.c 8.9 (Berkeley) 3/21/94 - * $Id: swap_pager.c,v 1.102 1998/10/13 08:24:42 dg Exp $ + * $Id: swap_pager.c,v 1.103 1998/10/31 15:31:28 peter Exp $ */ /* @@ -1535,12 +1535,14 @@ swap_pager_putpages(object, m, count, sync, rtvals) } } - if (bp->b_rcred != NOCRED) - crfree(bp->b_rcred); - if (bp->b_wcred != NOCRED) - crfree(bp->b_wcred); - - spc_free(spc); + if (spc != NULL) { + if (bp->b_rcred != NOCRED) + crfree(bp->b_rcred); + if (bp->b_wcred != NOCRED) + crfree(bp->b_wcred); + spc_free(spc); + } else + relpbuf(bp); if (swap_pager_free_pending) swap_pager_sync(); |