if (force_client_lock && code != CM_ERROR_WOULDBLOCK)
code = 0;
+ cm_HoldUser(userp);
+
lock_ObtainWrite(&cm_scacheLock);
fileLock = cm_GetFileLock();
- lock_ReleaseWrite(&cm_scacheLock);
#ifdef DEBUG
fileLock->fid = scp->fid;
#endif
fileLock->key = key;
fileLock->lockType = Which;
- cm_HoldUser(userp);
fileLock->userp = userp;
fileLock->range = range;
fileLock->flags = (code == 0 ? 0 :
fileLock->lastUpdate = (code == 0 && !force_client_lock) ? time(NULL) : 0;
- lock_ObtainWrite(&cm_scacheLock);
osi_QAddT(&scp->fileLocksH, &scp->fileLocksT, &fileLock->fileq);
cm_HoldSCacheNoLock(scp);
fileLock->scp = scp;
fileLock->range.length,
fileLock->lockType);
- if (scp->fileLocksT == q)
- scp->fileLocksT = osi_QPrev(q);
osi_QRemoveHT(&scp->fileLocksH, &scp->fileLocksT, q);
if (IS_LOCK_CLIENTONLY(fileLock)) {
/* discard lock record */
lock_ConvertRToW(&cm_scacheLock);
- if (scp->fileLocksT == q)
- scp->fileLocksT = osi_QPrev(q);
osi_QRemoveHT(&scp->fileLocksH, &scp->fileLocksT, q);
/*
handleCode:
if (code != 0 && code != CM_ERROR_WOULDBLOCK) {
lock_ObtainWrite(&cm_scacheLock);
- if (scp->fileLocksT == &oldFileLock->fileq)
- scp->fileLocksT = osi_QPrev(&oldFileLock->fileq);
osi_QRemoveHT(&scp->fileLocksH, &scp->fileLocksT, &oldFileLock->fileq);
lock_ReleaseWrite(&cm_scacheLock);
}