diff --git a/src/sbbs3/getnode.cpp b/src/sbbs3/getnode.cpp index 475e59fda456a692ba836243b3214945ec0ac51d..0d2eda66d5ab89a814d29501c9b1d7484179d6a2 100644 --- a/src/sbbs3/getnode.cpp +++ b/src/sbbs3/getnode.cpp @@ -56,6 +56,8 @@ bool sbbs_t::getnodedat(uint number, node_t *node, bool lockit) utime(str,NULL); /* NFS fix... utime() forces a cache refresh */ #endif for(count=0;count<LOOP_NODEDAB;count++) { + if(count > 0) + FILE_RETRY_DELAY(count + 1); if(lockit && lock(nodefile, nodedatoffset(number), sizeof(node_t))!=0) { unlock(nodefile, nodedatoffset(number), sizeof(node_t)); continue; @@ -67,7 +69,6 @@ bool sbbs_t::getnodedat(uint number, node_t *node, bool lockit) if(rd==sizeof(node_t)) break; } - FILE_RETRY_DELAY(count + 1); } if(!lockit && cfg.node_misc&NM_CLOSENODEDAB) { close(nodefile); @@ -289,6 +290,8 @@ bool sbbs_t::getnodeext(uint number, char *ext) number--; /* make zero based */ for(count=0;count<LOOP_NODEDAB;count++) { + if(count > 0) + FILE_RETRY_DELAY(count + 1); if(lock(node_ext,(long)number*128L,128)!=0) continue; lseek(node_ext,(long)number*128L,SEEK_SET); @@ -296,7 +299,6 @@ bool sbbs_t::getnodeext(uint number, char *ext) unlock(node_ext,(long)number*128L,128); if(rd==128) break; - FILE_RETRY_DELAY(count + 1); } close(node_ext); node_ext=-1; diff --git a/src/sbbs3/putnode.cpp b/src/sbbs3/putnode.cpp index 4ebb40427ab297dc3df8a2181da5a5ffa866884f..8f579bc5a11701d98e77e3bae82d1e8fe6acf2f5 100644 --- a/src/sbbs3/putnode.cpp +++ b/src/sbbs3/putnode.cpp @@ -118,12 +118,12 @@ bool sbbs_t::putnodeext(uint number, char *ext) } for(count=0;count<LOOP_NODEDAB;count++) { lseek(node_ext,(long)number*128L,SEEK_SET); - if(lock(node_ext,(long)number*128L,128)==-1) - continue; - wr=write(node_ext,ext,128); - unlock(node_ext,(long)number*128L,128); - if(wr==128) - break; + if(lock(node_ext,(long)number*128L,128) == 0) { + wr=write(node_ext,ext,128); + unlock(node_ext,(long)number*128L,128); + if(wr==128) + break; + } FILE_RETRY_DELAY(count + 1); } close(node_ext); @@ -132,7 +132,7 @@ bool sbbs_t::putnodeext(uint number, char *ext) if(count>(LOOP_NODEDAB/2) && count!=LOOP_NODEDAB) { snprintf(str, sizeof str, "NODE.EXB (node %d) COLLISION - Count: %d" ,number+1, count); - logline(LOG_NOTICE,"!!",str); + logline(LOG_NOTICE,"!!",str); } if(count==LOOP_NODEDAB) { errormsg(WHERE,ERR_WRITE,"NODE.EXB",number+1); diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index 42c6ab0a838c6c03d1112c3103c82c4f2e258c27..a714487664094cac896e684c70b929a17ba85cd9 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -1149,6 +1149,8 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp) int result = USER_SIZE_ERROR; if(filelength(file)>=(long)(number*sizeof(node_t))) { for(count=0;count<LOOP_NODEDAB;count++) { + if(count > 0) + FILE_RETRY_DELAY(count + 1); if(!seeknodedat(file, number)) { result = USER_SEEK_ERROR; continue; @@ -1166,7 +1168,6 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp) result = USER_SUCCESS; break; } - FILE_RETRY_DELAY(count + 1); } }