qremove-set-null-20060217
authorChaskiel M Grundman <cg2v@andrew.cmu.edu>
Fri, 17 Feb 2006 21:57:12 +0000 (21:57 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 17 Feb 2006 21:57:12 +0000 (21:57 +0000)
when we remove an object from a queue null its list pointers

src/afs/afs.h
src/afs/afs_cbqueue.c
src/afs/afs_vcache.c

index 93513e1..469025e 100644 (file)
@@ -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))
index 3b98d3e..451a01f 100644 (file)
@@ -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);
index 7a81bb3..6b6e943 100644 (file)
@@ -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.