From 80494f5096d231e1e032229732f2d94ba569718e Mon Sep 17 00:00:00 2001 From: Chaskiel M Grundman Date: Wed, 25 Mar 2009 19:34:38 +0000 Subject: [PATCH] cbr-free-what-you-alloc-20090325 LICENSE IPL10 FIXES 124531 dequeue and free items as alloc'd --- src/afs/afs_vcache.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/afs/afs_vcache.c b/src/afs/afs_vcache.c index d6322b0..de1eb04 100644 --- a/src/afs/afs_vcache.c +++ b/src/afs/afs_vcache.c @@ -324,6 +324,8 @@ afs_InactiveVCache(struct vcache *avc, struct AFS_UCRED *acred) * \return The allocated afs_cbr. */ static struct afs_cbr *afs_cbrSpace = 0; +/* if alloc limit below changes, fix me! */ +static struct afs_cbr *afs_cbrHeads[2]; struct afs_cbr * afs_AllocCBR(void) { @@ -345,6 +347,7 @@ afs_AllocCBR(void) } tsp[AFS_NCBRS - 1].next = 0; afs_cbrSpace = tsp; + afs_cbrHeads[afs_stats_cmperf.CallBackAlloced] = tsp; afs_stats_cmperf.CallBackAlloced++; } } @@ -3350,8 +3353,9 @@ shutdown_vcache(void) /* * Free any leftover callback queue */ - for (tsp = afs_cbrSpace; tsp; tsp = nsp) { - nsp = tsp->next; + for (i = 0; i < afs_stats_cmperf.CallBackAlloced; i++) { + tsp = afs_cbrHeads[i]; + afs_cbrHeads[i] = 0; afs_osi_Free((char *)tsp, AFS_NCBRS * sizeof(struct afs_cbr)); } afs_cbrSpace = 0; -- 1.9.4