Skip to content
Snippets Groups Projects
Commit 7c2ca73d authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

node.dab to use same lock/read retry count/delay as user.tab file

parent a90bf488
No related branches found
No related tags found
1 merge request!488Overhaul LZH code
Pipeline #7472 passed
...@@ -57,8 +57,6 @@ bool sbbs_t::getnodedat(uint number, node_t *node, bool lockit) ...@@ -57,8 +57,6 @@ bool sbbs_t::getnodedat(uint number, node_t *node, bool lockit)
#endif #endif
number--; /* make zero based */ number--; /* make zero based */
for(count=0;count<LOOP_NODEDAB;count++) { for(count=0;count<LOOP_NODEDAB;count++) {
if(count)
mswait(100);
if(lockit && lock(nodefile,(long)number*sizeof(node_t),sizeof(node_t))!=0) { if(lockit && lock(nodefile,(long)number*sizeof(node_t),sizeof(node_t))!=0) {
unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t)); unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
continue; continue;
...@@ -69,6 +67,7 @@ bool sbbs_t::getnodedat(uint number, node_t *node, bool lockit) ...@@ -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)); unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
if(rd==sizeof(node_t)) if(rd==sizeof(node_t))
break; break;
FILE_RETRY_DELAY(count + 1);
} }
if(!lockit && cfg.node_misc&NM_CLOSENODEDAB) { if(!lockit && cfg.node_misc&NM_CLOSENODEDAB) {
close(nodefile); close(nodefile);
...@@ -290,8 +289,6 @@ bool sbbs_t::getnodeext(uint number, char *ext) ...@@ -290,8 +289,6 @@ bool sbbs_t::getnodeext(uint number, char *ext)
number--; /* make zero based */ number--; /* make zero based */
for(count=0;count<LOOP_NODEDAB;count++) { for(count=0;count<LOOP_NODEDAB;count++) {
if(count)
mswait(100);
if(lock(node_ext,(long)number*128L,128)!=0) if(lock(node_ext,(long)number*128L,128)!=0)
continue; continue;
lseek(node_ext,(long)number*128L,SEEK_SET); lseek(node_ext,(long)number*128L,SEEK_SET);
...@@ -299,6 +296,7 @@ bool sbbs_t::getnodeext(uint number, char *ext) ...@@ -299,6 +296,7 @@ bool sbbs_t::getnodeext(uint number, char *ext)
unlock(node_ext,(long)number*128L,128); unlock(node_ext,(long)number*128L,128);
if(rd==128) if(rd==128)
break; break;
FILE_RETRY_DELAY(count + 1);
} }
close(node_ext); close(node_ext);
node_ext=-1; node_ext=-1;
......
...@@ -3655,7 +3655,7 @@ bool sbbs_t::init() ...@@ -3655,7 +3655,7 @@ bool sbbs_t::init()
unlock(nodefile,(cfg.node_num-1)*sizeof(node_t),sizeof(node_t)); unlock(nodefile,(cfg.node_num-1)*sizeof(node_t),sizeof(node_t));
break; break;
} }
mswait(100); FILE_RETRY_DELAY(i + 1);
} }
if(cfg.node_misc&NM_CLOSENODEDAB) { if(cfg.node_misc&NM_CLOSENODEDAB) {
close(nodefile); close(nodefile);
...@@ -3984,7 +3984,7 @@ int sbbs_t::nopen(char *str, int access) ...@@ -3984,7 +3984,7 @@ int sbbs_t::nopen(char *str, int access)
access|=O_BINARY; access|=O_BINARY;
while(((file=sopen(str,access,share,DEFFILEMODE))==-1) while(((file=sopen(str,access,share,DEFFILEMODE))==-1)
&& FILE_RETRY_ERRNO(errno) && count++<LOOP_NOPEN) && FILE_RETRY_ERRNO(errno) && count++<LOOP_NOPEN)
SLEEP((count / 10) * 100); FILE_RETRY_DELAY(count);
if(count>(LOOP_NOPEN/2) && count<=LOOP_NOPEN) { if(count>(LOOP_NOPEN/2) && count<=LOOP_NOPEN) {
SAFEPRINTF2(logstr,"NOPEN COLLISION - File: \"%s\" Count: %d" SAFEPRINTF2(logstr,"NOPEN COLLISION - File: \"%s\" Count: %d"
,str,count); ,str,count);
......
...@@ -65,7 +65,7 @@ bool sbbs_t::putnodedat(uint number, node_t* node) ...@@ -65,7 +65,7 @@ bool sbbs_t::putnodedat(uint number, node_t* node)
if(wr==sizeof(node_t)) if(wr==sizeof(node_t))
break; break;
wrerr=errno; /* save write error */ wrerr=errno; /* save write error */
mswait(100); FILE_RETRY_DELAY(attempts + 1);
} }
unlocknodedat(number); unlocknodedat(number);
...@@ -116,8 +116,6 @@ bool sbbs_t::putnodeext(uint number, char *ext) ...@@ -116,8 +116,6 @@ bool sbbs_t::putnodeext(uint number, char *ext)
return false; return false;
} }
for(count=0;count<LOOP_NODEDAB;count++) { for(count=0;count<LOOP_NODEDAB;count++) {
if(count)
mswait(100);
lseek(node_ext,(long)number*128L,SEEK_SET); lseek(node_ext,(long)number*128L,SEEK_SET);
if(lock(node_ext,(long)number*128L,128)==-1) if(lock(node_ext,(long)number*128L,128)==-1)
continue; continue;
...@@ -125,6 +123,7 @@ bool sbbs_t::putnodeext(uint number, char *ext) ...@@ -125,6 +123,7 @@ bool sbbs_t::putnodeext(uint number, char *ext)
unlock(node_ext,(long)number*128L,128); unlock(node_ext,(long)number*128L,128);
if(wr==128) if(wr==128)
break; break;
FILE_RETRY_DELAY(count + 1);
} }
close(node_ext); close(node_ext);
node_ext=-1; node_ext=-1;
......
...@@ -514,7 +514,8 @@ typedef enum { /* Values for xtrn_t.event */ ...@@ -514,7 +514,8 @@ typedef enum { /* Values for xtrn_t.event */
#define SEC_CID 10 /* Ten second pause for caller ID */ #define SEC_CID 10 /* Ten second pause for caller ID */
#define SEC_RING 6 /* Maximum seconds between rings */ #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 */ /* String lengths */
#define LEN_ALIAS 25 /* User alias */ #define LEN_ALIAS 25 /* User alias */
......
...@@ -49,7 +49,6 @@ ...@@ -49,7 +49,6 @@
static const char user_field_separator[2] = { USER_FIELD_SEPARATOR, '\0' }; static const char user_field_separator[2] = { USER_FIELD_SEPARATOR, '\0' };
#define LOOP_USERDAT 200 #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) char* userdat_filename(scfg_t* cfg, char* path, size_t size)
{ {
...@@ -282,7 +281,7 @@ bool lockuserdat(int file, unsigned user_number) ...@@ -282,7 +281,7 @@ bool lockuserdat(int file, unsigned user_number)
unsigned attempt=0; unsigned attempt=0;
while(attempt < LOOP_USERDAT && lock(file, offset, USER_RECORD_LINE_LEN) == -1) { while(attempt < LOOP_USERDAT && lock(file, offset, USER_RECORD_LINE_LEN) == -1) {
attempt++; attempt++;
RETRY_DELAY(attempt); FILE_RETRY_DELAY(attempt);
} }
return attempt < LOOP_USERDAT; return attempt < LOOP_USERDAT;
} }
...@@ -1141,8 +1140,6 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp) ...@@ -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))) { if(filelength(file)>=(long)(number*sizeof(node_t))) {
number--; /* make zero based */ number--; /* make zero based */
for(count=0;count<LOOP_NODEDAB;count++) { for(count=0;count<LOOP_NODEDAB;count++) {
if(count)
mswait(100);
(void)lseek(file,(long)number*sizeof(node_t),SEEK_SET); (void)lseek(file,(long)number*sizeof(node_t),SEEK_SET);
if(lockit if(lockit
&& lock(file,(long)number*sizeof(node_t),sizeof(node_t))!=0) { && 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) ...@@ -1157,6 +1154,7 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp)
result = USER_SUCCESS; result = USER_SUCCESS;
break; break;
} }
FILE_RETRY_DELAY(count + 1);
} }
} }
...@@ -1191,7 +1189,7 @@ int putnodedat(scfg_t* cfg, uint number, node_t* node, bool closeit, int file) ...@@ -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); (void)lseek(file,(long)number*sizeof(node_t),SEEK_SET);
if((wr=write(file,node,sizeof(node_t)))==sizeof(node_t)) if((wr=write(file,node,sizeof(node_t)))==sizeof(node_t))
break; break;
RETRY_DELAY(attempts + 1); FILE_RETRY_DELAY(attempts + 1);
} }
unlock(file,(long)number*sizeof(node_t),sizeof(node_t)); unlock(file,(long)number*sizeof(node_t),sizeof(node_t));
if(closeit) if(closeit)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment