lock_ObtainWrite(&scp->rw);
if (code == 0) {
int lostRace = cm_EndCallbackGrantingCall(scp, &cbr, &callback, &volSync, 0);
- if (!lostRace)
+ if (lostRace) {
+ InterlockedDecrement(&scp->activeRPCs);
+ } else {
code = cm_MergeStatus(NULL, scp, &afsStatus, &volSync, userp, reqp, 0);
+ }
} else {
cm_EndCallbackGrantingCall(NULL, &cbr, NULL, NULL, 0);
InterlockedDecrement(&scp->activeRPCs);
&bbp->callbacks[j],
&volSync,
CM_CALLBACK_MAINTAINCOUNT|CM_CALLBACK_BULKSTAT);
- InterlockedIncrement(&scp->activeRPCs);
- if (!lostRace)
+ if (!lostRace) {
+ InterlockedIncrement(&scp->activeRPCs);
code = cm_MergeStatus(dscp, scp, &bbp->stats[j], &volSync, userp, reqp, CM_MERGEFLAG_BULKSTAT);
+ }
lock_ReleaseWrite(&scp->rw);
} else {
lock_ReleaseRead(&scp->rw);
if (!cm_HaveCallback(scp)) {
lostRace = cm_EndCallbackGrantingCall(scp, &cbReq,
&newFileCallback, &volSync, 0);
- InterlockedIncrement(&scp->activeRPCs);
- if (!lostRace)
+ if (!lostRace) {
+ InterlockedIncrement(&scp->activeRPCs);
code = cm_MergeStatus( dscp, scp, &newFileStatus, &volSync,
userp, reqp, 0);
+ }
didEnd = 1;
}
lock_ReleaseWrite(&scp->rw);
if (!cm_HaveCallback(scp)) {
lostRace = cm_EndCallbackGrantingCall(scp, &cbReq,
&newDirCallback, &volSync, 0);
- InterlockedIncrement(&scp->activeRPCs);
- if (!lostRace)
+ if (!lostRace) {
+ InterlockedIncrement(&scp->activeRPCs);
code = cm_MergeStatus( dscp, scp, &newDirStatus, &volSync,
userp, reqp, 0);
+ }
didEnd = 1;
}
lock_ReleaseWrite(&scp->rw);