From 50739c00939dfeb48fa420e474fd0593b12c2c72 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Tue, 12 Jun 2001 01:26:53 +0000 Subject: [PATCH] Retrys write up to 10 times, locks record first. --- src/sbbs3/userdat.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index c37e7ab6c6..2f5f78dabd 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -593,7 +593,10 @@ int DLLCALL getnodedat(scfg_t* cfg, uint number, node_t *node, char lockit) int DLLCALL putnodedat(scfg_t* cfg, uint number, node_t* node) { char str[MAX_PATH]; + size_t wr; + int wrerr; int file; + int attempts; if(!number || number>cfg->sys_nodes) return(-1); @@ -605,15 +608,19 @@ int DLLCALL putnodedat(scfg_t* cfg, uint number, node_t* node) } number--; /* make zero based */ - lseek(file,(long)number*sizeof(node_t),SEEK_SET); - if(write(file,node,sizeof(node_t))!=sizeof(node_t)) { - unlock(file,(long)number*sizeof(node_t),sizeof(node_t)); - close(file); - return(-2); + for(attempts=0;attempts<10;attempts++) { + lseek(file,(long)number*sizeof(node_t),SEEK_SET); + lock(file,(long)number*sizeof(node_t),sizeof(node_t)); + if((wr=write(file,node,sizeof(node_t)))==sizeof(node_t)) + break; + wrerr=errno; /* save write error */ + mswait(100); } unlock(file,(long)number*sizeof(node_t),sizeof(node_t)); close(file); + if(wr!=sizeof(node_t)) + return(wrerr); return(0); } -- GitLab