static char *illegalChars = "\\/:*?\"<>|";
BOOL isWindows2000 = FALSE;
-smb_vc_t *dead_vcp = NULL;
smb_vc_t *active_vcp = NULL;
int smbShutdownFlag = 0;
if (fid == fidp->fid) {
if (newFid) {
fid++;
- if (fid == 0) {
+ if (fid == 0xFFFF) {
osi_Log1(smb_logp,
"New FID number wraps on vcp 0x%x", vcp);
fid = 1;
osi_Log1(smb_logp, "Event Object Already Exists: %s", osi_LogSaveString(smb_logp, eventName));
thrd_CloseHandle(event);
fid++;
- if (fid == 0) {
+ if (fid == 0xFFFF) {
osi_Log1(smb_logp, "New FID wraps around for vcp 0x%x", vcp);
fid = 1;
}
*/
if (tp->refCount == 0 && (isV3 || tp->cookie <= 255)) {
/* hold and delete */
+ lock_ObtainMutex(&tp->mx);
tp->flags |= SMB_DIRSEARCH_DELETE;
+ lock_ReleaseMutex(&tp->mx);
victimsp[victimCount++] = tp;
tp->refCount++;
}
LogEvent(EVENTLOG_WARNING_TYPE, MSG_SMB_SEND_PACKET_FAILURE, s);
#endif /* !DJGPP */
- osi_Log2(smb_logp, "setting dead_vcp 0x%x, user struct 0x%x",
- vcp, vcp->usersp);
- smb_HoldVC(vcp);
- lock_ObtainMutex(&vcp->mx);
- vcp->flags |= SMB_VCFLAG_ALREADYDEAD;
- lock_ReleaseMutex(&vcp->mx);
+ osi_Log2(smb_logp, "marking dead vcp 0x%x, user struct 0x%x",
+ vcp, vcp->usersp);
lock_ObtainWrite(&smb_globalLock);
- if (dead_vcp) {
- smb_vc_t * dvcp = dead_vcp;
- dead_vcp = vcp;
- dead_sessions[vcp->session] = TRUE;
- lock_ReleaseWrite(&smb_globalLock);
- osi_Log1(smb_logp,"Previous dead_vcp %x", dvcp);
- smb_CleanupDeadVC(dvcp);
- smb_ReleaseVC(dvcp);
- } else {
- dead_vcp = vcp;
- dead_sessions[vcp->session] = TRUE;
- lock_ReleaseWrite(&smb_globalLock);
- }
+ lock_ObtainMutex(&vcp->mx);
+ vcp->flags |= SMB_VCFLAG_ALREADYDEAD;
+ dead_sessions[vcp->session] = TRUE;
+ lock_ReleaseMutex(&vcp->mx);
+ lock_ReleaseWrite(&smb_globalLock);
+ smb_CleanupDeadVC(vcp);
}
if (localNCB)
tcounter++; /* which proto entry we're looking at */
}
+ lock_ObtainMutex(&vcp->mx);
if (NTProtoIndex != -1) {
protoIndex = NTProtoIndex;
vcp->flags |= (SMB_VCFLAG_USENT | SMB_VCFLAG_USEV3);
vcp->flags |= SMB_VCFLAG_USECORE;
}
else protoIndex = -1;
+ lock_ReleaseMutex(&vcp->mx);
if (protoIndex == -1)
return CM_ERROR_INVAL;
truncAttr.length.HighPart = 0;
lock_ObtainMutex(&fidp->mx);
code = cm_SetAttr(fidp->scp, &truncAttr, userp, &req);
+ fidp->flags |= SMB_FID_LENGTHSETDONE;
lock_ReleaseMutex(&fidp->mx);
smb_SetSMBParm(outp, 0, /* count */ 0);
smb_SetSMBDataLength(outp, 0);
- fidp->flags |= SMB_FID_LENGTHSETDONE;
goto done;
}
vcp = smb_FindVC(ncbp->ncb_lsn, 0, lanas[idx_session]);
if (vcp) {
lock_ObtainWrite(&smb_globalLock);
- if (dead_vcp == vcp) {
- osi_Log1(smb_logp, "dead_vcp already set, 0x%x", dead_vcp);
- lock_ReleaseWrite(&smb_globalLock);
- } else if (!(vcp->flags & SMB_VCFLAG_ALREADYDEAD)) {
- osi_Log2(smb_logp, "setting dead_vcp 0x%x, user struct 0x%x",
+ if (!(vcp->flags & SMB_VCFLAG_ALREADYDEAD)) {
+ osi_Log2(smb_logp, "marking dead vcp 0x%x, user struct 0x%x",
vcp, vcp->usersp);
- if (dead_vcp) {
- smb_vc_t * dvcp = dead_vcp;
- dead_vcp = vcp; /* transfer the reference */
- dead_sessions[vcp->session] = TRUE;
- lock_ReleaseWrite(&smb_globalLock);
- osi_Log1(smb_logp,"Previous dead_vcp %x", dvcp);
- smb_CleanupDeadVC(dvcp);
- smb_ReleaseVC(dvcp);
- } else {
- dead_vcp = vcp; /* transfer the reference */
- dead_sessions[vcp->session] = TRUE;
- lock_ReleaseWrite(&smb_globalLock);
- }
lock_ObtainMutex(&vcp->mx);
vcp->flags |= SMB_VCFLAG_ALREADYDEAD;
+ dead_sessions[vcp->session] = TRUE;
lock_ReleaseMutex(&vcp->mx);
+ lock_ReleaseWrite(&smb_globalLock);
+ smb_CleanupDeadVC(vcp);
+ smb_ReleaseVC(vcp);
vcp = NULL;
}
}
if (vcp && vcp->errorCount++ > 3) {
osi_Log2(smb_logp, "session [ %d ] closed, vcp->errorCount = %d", idx_session, vcp->errorCount);
lock_ObtainWrite(&smb_globalLock);
- if (dead_vcp == vcp) {
- osi_Log1(smb_logp, "dead_vcp already set, 0x%x", dead_vcp);
- lock_ReleaseWrite(&smb_globalLock);
- } else if (!(vcp->flags & SMB_VCFLAG_ALREADYDEAD)) {
- osi_Log2(smb_logp, "setting dead_vcp 0x%x, user struct 0x%x",
+ if (!(vcp->flags & SMB_VCFLAG_ALREADYDEAD)) {
+ osi_Log2(smb_logp, "marking dead vcp 0x%x, user struct 0x%x",
vcp, vcp->usersp);
- if (dead_vcp) {
- smb_vc_t * dvcp = dead_vcp;
- dead_vcp = vcp; /* transfer reference */
- dead_sessions[vcp->session] = TRUE;
- lock_ReleaseWrite(&smb_globalLock);
-
- osi_Log1(smb_logp,"Previous dead_vcp %x", dvcp);
- smb_CleanupDeadVC(dvcp);
- smb_ReleaseVC(dvcp);
- }
- lock_ObtainMutex(&vcp->mx);
- vcp->flags |= SMB_VCFLAG_ALREADYDEAD;
- lock_ReleaseMutex(&vcp->mx);
+ lock_ObtainMutex(&vcp->mx);
+ vcp->flags |= SMB_VCFLAG_ALREADYDEAD;
+ dead_sessions[vcp->session] = TRUE;
+ lock_ReleaseMutex(&vcp->mx);
+ lock_ReleaseWrite(&smb_globalLock);
+ smb_CleanupDeadVC(vcp);
+ smb_ReleaseVC(vcp);
vcp = NULL;
}
goto doneWithNCB;