statp->fileLength = scp->length;
statp->fileType = scp->fileType;
statp->flags = CM_FIDSTATS_FLAG_HAVE_SCACHE;
+ lock_ConvertRToW(&scp->rw);
if (cm_HaveCallback(scp))
statp->flags |= CM_FIDSTATS_FLAG_CALLBACK;
+ lock_ConvertWToR(&scp->rw);
if (scp->flags & CM_SCACHEFLAG_RO)
statp->flags |= CM_FIDSTATS_FLAG_RO;
if (scp->flags & CM_SCACHEFLAG_PURERO)
for (scp=cm_data.scacheHashTablep[i]; scp; scp=scp->nextp) {
if (scp->fid.cell == 0)
continue;
+ lock_ReleaseRead(&cm_scacheLock);
cm_PerformanceAddSCache(scp);
+ lock_ObtainRead(&cm_scacheLock);
}
}
lock_ReleaseRead(&cm_scacheLock);
break;
}
}
- if (!statp)
+ if (!statp) {
+ lock_ReleaseRead(&cm_scacheLock);
cm_PerformanceAddSCache(scp);
+ lock_ObtainRead(&cm_scacheLock);
+ }
}
}
lock_ReleaseRead(&cm_scacheLock);