if (code || (bp->cmFlags & CM_BUF_CMFETCHING)) {
code = 0;
- if (bp)
+ if (bp) {
buf_Release(bp);
+ bp = NULL;
+ }
break;
}
cm_ClearPrefetchFlag(LargeIntegerGreaterThanZero(fetched) ? 0 : code,
scp, &base, &fetched);
lock_ReleaseMutex(&scp->mx);
- if (bp)
+ if (bp) {
buf_Release(bp);
+ bp = NULL;
+ }
osi_Log4(afsd_logp, "Ending BKG prefetch scp 0x%p, code %d bytes 0x%x:%x",
scp, code, fetched.HighPart, fetched.LowPart);
if (code) {
lock_ReleaseMutex(&bufp->mx);
buf_Release(bufp);
+ bufp = NULL;
buf_UnreserveBuffers(cm_chunkSize / cm_data.buf_blockSize);
return code;
}
}
buf_Release(tbp);
+ tbp = NULL;
pageBase = LargeIntegerAdd(tblocksize, pageBase);
collected += cm_data.buf_blockSize;
&qdp->q);
osi_QDFree(qdp);
buf_Release(tbp);
+ tbp = NULL;
}
/* Caller expects this */
code = CM_ERROR_NOSUCHFILE;
else if (dscp->fileType == CM_SCACHETYPE_DIRECTORY) {
cm_buf_t *bp = buf_Find(dscp, &hzero);
- if (bp)
+ if (bp) {
buf_Release(bp);
+ bp = NULL;
+ }
else
code = CM_ERROR_NOSUCHFILE;
}
code = CM_ERROR_NOSUCHFILE;
else if (dscp->fileType == CM_SCACHETYPE_DIRECTORY) {
cm_buf_t *bp = buf_Find(dscp, &hzero);
- if (bp)
+ if (bp) {
buf_Release(bp);
+ bp = NULL;
+ }
else
code = CM_ERROR_NOSUCHFILE;
}
(scp->fileType == CM_SCACHETYPE_DIRECTORY ||
scp->fileType == CM_SCACHETYPE_MOUNTPOINT ||
scp->fileType == CM_SCACHETYPE_INVALID) ? 1 : 0); /* is a dir? */
- lock_ReleaseMutex(&scp->mx);
smb_SetSMBDataLength(outp, 0);
if ((fidp->flags & SMB_FID_EXECUTABLE) &&
- LargeIntegerGreaterThanZero(fidp->scp->length)) {
+ LargeIntegerGreaterThanZero(fidp->scp->length) &&
+ !(scp->flags & CM_SCACHEFLAG_PREFETCHING)) {
cm_QueueBKGRequest(fidp->scp, cm_BkgPrefetch, 0, 0,
fidp->scp->length.LowPart, fidp->scp->length.HighPart,
userp);
}
+ lock_ReleaseMutex(&scp->mx);
osi_Log2(smb_logp, "SMB NT CreateX opening fid %d path %s", fidp->fid,
osi_LogSaveString(smb_logp, realPathp));
lock_ReleaseMutex(&scp->mx);
}
+ lock_ObtainMutex(&scp->mx);
if ((fidp->flags & SMB_FID_EXECUTABLE) &&
- LargeIntegerGreaterThanZero(fidp->scp->length)) {
+ LargeIntegerGreaterThanZero(fidp->scp->length) &&
+ !(scp->flags & CM_SCACHEFLAG_PREFETCHING)) {
cm_QueueBKGRequest(fidp->scp, cm_BkgPrefetch, 0, 0,
fidp->scp->length.LowPart, fidp->scp->length.HighPart,
userp);
}
+ lock_ReleaseMutex(&scp->mx);
osi_Log1(smb_logp, "SMB NTTranCreate opening fid %d", fidp->fid);