From 55bdee41e635da3396ddd25234b3d5910921c1d5 Mon Sep 17 00:00:00 2001 From: Chaskiel M Grundman Date: Fri, 17 Feb 2006 21:57:12 +0000 Subject: [PATCH] qremove-set-null-20060217 when we remove an object from a queue null its list pointers --- src/afs/afs.h | 2 +- src/afs/afs_cbqueue.c | 6 ++---- src/afs/afs_vcache.c | 1 - 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/afs/afs.h b/src/afs/afs.h index 93513e1a0..469025ee4 100644 --- a/src/afs/afs.h +++ b/src/afs/afs.h @@ -315,7 +315,7 @@ struct conn { #define QInit(q) ((q)->prev = (q)->next = (q)) #define QAdd(q,e) ((e)->next = (q)->next, (e)->prev = (q), \ (q)->next->prev = (e), (q)->next = (e)) -#define QRemove(e) ((e)->next->prev = (e)->prev, (e)->prev->next = (e)->next) +#define QRemove(e) ((e)->next->prev = (e)->prev, (e)->prev->next = (e)->next, (e)->prev = NULL, (e)->next = NULL) #define QNext(e) ((e)->next) #define QPrev(e) ((e)->prev) #define QEmpty(q) ((q)->prev == (q)) diff --git a/src/afs/afs_cbqueue.c b/src/afs/afs_cbqueue.c index 3b98d3eaa..451a01f1f 100644 --- a/src/afs/afs_cbqueue.c +++ b/src/afs/afs_cbqueue.c @@ -141,7 +141,6 @@ afs_DequeueCallback(struct vcache *avc) debugvc = avc; if (avc->callsort.prev) { QRemove(&(avc->callsort)); - avc->callsort.prev = avc->callsort.next = NULL; } else; /* must have got dequeued in a race */ return; @@ -220,7 +219,6 @@ afs_CheckCallbacks(unsigned int secs) /* What about locking xvcache or vrefcount++ or * write locking tvc? */ QRemove(tq); - tq->prev = tq->next = NULL; tvc->states &= ~(CStatd | CMValid | CUnique); if (!(tvc->states & CVInit) && (tvc->fid.Fid.Vnode & 1 || @@ -238,7 +236,6 @@ afs_CheckCallbacks(unsigned int secs) * What about locking xvcache or vrefcount++ or write locking tvc? */ QRemove(tq); - tq->prev = tq->next = NULL; tvc->states &= ~(CStatd | CMValid | CUnique); if (!(tvc->states & CVInit) && (tvc->fid.Fid.Vnode & 1 || (vType(tvc) == VDIR))) @@ -311,7 +308,8 @@ afs_FlushCBs(void) tvc->callback = 0; tvc->dchint = NULL; /* invalidate hints */ tvc->states &= ~(CStatd); - tvc->callsort.prev = tvc->callsort.next = NULL; + if (QPrev(&(tvc->callsort))) + QRemove(&(tvc->callsort)); if (!(tvc->states & CVInit) && ((tvc->fid.Fid.Vnode & 1) || (vType(tvc) == VDIR))) osi_dnlc_purgedp(tvc); diff --git a/src/afs/afs_vcache.c b/src/afs/afs_vcache.c index 7a81bb305..6b6e94343 100644 --- a/src/afs/afs_vcache.c +++ b/src/afs/afs_vcache.c @@ -163,7 +163,6 @@ afs_FlushVCache(struct vcache *avc, int *slept) avc->states |= CVFlushed; /* pull the entry out of the lruq and put it on the free list */ QRemove(&avc->vlruq); - avc->vlruq.prev = avc->vlruq.next = (struct afs_q *)0; /* keep track of # of files that we bulk stat'd, but never used * before they got recycled. -- 2.39.5