diff --git a/src/sbbs3/getnode.cpp b/src/sbbs3/getnode.cpp index 5e0d13c811346d2adc563bd8932d534a8b3a7350..4ec584b233d29d87fb408640ea6dbb3e9b68e57d 100644 --- a/src/sbbs3/getnode.cpp +++ b/src/sbbs3/getnode.cpp @@ -57,8 +57,6 @@ bool sbbs_t::getnodedat(uint number, node_t *node, bool lockit) #endif number--; /* make zero based */ for(count=0;count<LOOP_NODEDAB;count++) { - if(count) - mswait(100); if(lockit && lock(nodefile,(long)number*sizeof(node_t),sizeof(node_t))!=0) { unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t)); continue; @@ -69,6 +67,7 @@ bool sbbs_t::getnodedat(uint number, node_t *node, bool lockit) unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t)); if(rd==sizeof(node_t)) break; + FILE_RETRY_DELAY(count + 1); } if(!lockit && cfg.node_misc&NM_CLOSENODEDAB) { close(nodefile); @@ -290,8 +289,6 @@ bool sbbs_t::getnodeext(uint number, char *ext) number--; /* make zero based */ for(count=0;count<LOOP_NODEDAB;count++) { - if(count) - mswait(100); if(lock(node_ext,(long)number*128L,128)!=0) continue; lseek(node_ext,(long)number*128L,SEEK_SET); @@ -299,6 +296,7 @@ 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/main.cpp b/src/sbbs3/main.cpp index fd25b06d9c24451bdbca487ee725d346ab80cf60..1dabb5961ea47449e288650ba9c810f453027c49 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -3655,7 +3655,7 @@ bool sbbs_t::init() unlock(nodefile,(cfg.node_num-1)*sizeof(node_t),sizeof(node_t)); break; } - mswait(100); + FILE_RETRY_DELAY(i + 1); } if(cfg.node_misc&NM_CLOSENODEDAB) { close(nodefile); @@ -3984,7 +3984,7 @@ int sbbs_t::nopen(char *str, int access) access|=O_BINARY; while(((file=sopen(str,access,share,DEFFILEMODE))==-1) && FILE_RETRY_ERRNO(errno) && count++<LOOP_NOPEN) - SLEEP((count / 10) * 100); + FILE_RETRY_DELAY(count); if(count>(LOOP_NOPEN/2) && count<=LOOP_NOPEN) { SAFEPRINTF2(logstr,"NOPEN COLLISION - File: \"%s\" Count: %d" ,str,count); diff --git a/src/sbbs3/putnode.cpp b/src/sbbs3/putnode.cpp index 6afdb025b7af6d4a53af167e75d8e67933cb071d..e8b9c183ae97142275cfff0d9843a715a1becc0a 100644 --- a/src/sbbs3/putnode.cpp +++ b/src/sbbs3/putnode.cpp @@ -65,7 +65,7 @@ bool sbbs_t::putnodedat(uint number, node_t* node) if(wr==sizeof(node_t)) break; wrerr=errno; /* save write error */ - mswait(100); + FILE_RETRY_DELAY(attempts + 1); } unlocknodedat(number); @@ -116,8 +116,6 @@ bool sbbs_t::putnodeext(uint number, char *ext) return false; } for(count=0;count<LOOP_NODEDAB;count++) { - if(count) - mswait(100); lseek(node_ext,(long)number*128L,SEEK_SET); if(lock(node_ext,(long)number*128L,128)==-1) continue; @@ -125,6 +123,7 @@ bool sbbs_t::putnodeext(uint number, char *ext) unlock(node_ext,(long)number*128L,128); if(wr==128) break; + FILE_RETRY_DELAY(count + 1); } close(node_ext); node_ext=-1; diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h index c2c7a6b2df9a6f7febbc89626574497c3d95023b..4ac198b3ff8710555dfde6d950132d95625f2bfe 100644 --- a/src/sbbs3/sbbsdefs.h +++ b/src/sbbs3/sbbsdefs.h @@ -514,7 +514,8 @@ typedef enum { /* Values for xtrn_t.event */ #define SEC_CID 10 /* Ten second pause for caller ID */ #define SEC_RING 6 /* Maximum seconds between rings */ -#define LOOP_NODEDAB 50 /* Retries on node.dab locking/unlocking */ +#define LOOP_NODEDAB 200 /* Retries on node.dab locking/unlocking */ +#define FILE_RETRY_DELAY(x) mswait(((x / 10) * 50) + xp_random(100)) /* String lengths */ #define LEN_ALIAS 25 /* User alias */ diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index ad3e15c70262f5364a89a77c95b8c196576d84ec..4b77d6d1087975b8cba13483ee8ecf9002e57e7f 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -49,7 +49,6 @@ static const char user_field_separator[2] = { USER_FIELD_SEPARATOR, '\0' }; #define LOOP_USERDAT 200 -#define RETRY_DELAY(x) mswait(((x / 10) * 50) + xp_random(100)) char* userdat_filename(scfg_t* cfg, char* path, size_t size) { @@ -282,7 +281,7 @@ bool lockuserdat(int file, unsigned user_number) unsigned attempt=0; while(attempt < LOOP_USERDAT && lock(file, offset, USER_RECORD_LINE_LEN) == -1) { attempt++; - RETRY_DELAY(attempt); + FILE_RETRY_DELAY(attempt); } return attempt < LOOP_USERDAT; } @@ -1141,8 +1140,6 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp) if(filelength(file)>=(long)(number*sizeof(node_t))) { number--; /* make zero based */ for(count=0;count<LOOP_NODEDAB;count++) { - if(count) - mswait(100); (void)lseek(file,(long)number*sizeof(node_t),SEEK_SET); if(lockit && lock(file,(long)number*sizeof(node_t),sizeof(node_t))!=0) { @@ -1157,6 +1154,7 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp) result = USER_SUCCESS; break; } + FILE_RETRY_DELAY(count + 1); } } @@ -1191,7 +1189,7 @@ int putnodedat(scfg_t* cfg, uint number, node_t* node, bool closeit, int file) (void)lseek(file,(long)number*sizeof(node_t),SEEK_SET); if((wr=write(file,node,sizeof(node_t)))==sizeof(node_t)) break; - RETRY_DELAY(attempts + 1); + FILE_RETRY_DELAY(attempts + 1); } unlock(file,(long)number*sizeof(node_t),sizeof(node_t)); if(closeit)