cm_racingRevokes_t *nrevp; /* where we'll be next */
int freeFlag;
cm_server_t * serverp = 0;
+ int discardScp = 0;
lock_ObtainWrite(&cm_callbackLock);
if (flags & CM_CALLBACK_MAINTAINCOUNT) {
scp,
cbrp->callbackCount, revp->callbackCount,
cm_callbackCount);
- cm_DiscardSCache(scp);
- /*
- * Since we don't have a callback to preserve, it's
- * OK to drop the lock and re-obtain it.
- */
- lock_ReleaseMutex(&scp->mx);
- lock_ReleaseWrite(&cm_callbackLock);
- cm_CallbackNotifyChange(scp);
- lock_ObtainMutex(&scp->mx);
- lock_ObtainWrite(&cm_callbackLock);
+ discardScp = 1;
}
if (freeFlag)
free(revp);
lock_ReleaseWrite(&cm_callbackLock);
+ if ( discardScp ) {
+ cm_DiscardSCache(scp);
+ lock_ReleaseMutex(&scp->mx);
+ cm_CallbackNotifyChange(scp);
+ lock_ObtainMutex(&scp->mx);
+ }
+
if ( serverp ) {
lock_ObtainWrite(&cm_serverLock);
cm_FreeServer(serverp);