X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ffnet-dc.c;h=01792233523c8dde3059e0a53b235f4d92893625;hb=6305c428814bad7215d3f7649cafaf264e68af13;hp=b3b9afe0bf001abd1f69bfca7f31cda41b6980b5;hpb=daa53556bc652f7dbe03b1c50fb915398ff66721;p=doldaconnect.git diff --git a/daemon/fnet-dc.c b/daemon/fnet-dc.c index b3b9afe..0179223 100644 --- a/daemon/fnet-dc.c +++ b/daemon/fnet-dc.c @@ -158,6 +158,7 @@ static struct dcexppeer *expected = NULL; static char *hmlistname = NULL; static char *xmllistname = NULL; static char *xmlbz2listname = NULL; +static struct timer *listwritetimer = NULL; static void peerconnect(struct socket *sk, int err, struct fnetnode *fn); static void freedcpeer(struct dcpeer *peer); @@ -168,6 +169,7 @@ static void updatehmlist(void); static void updatexmllist(void); static void updatexmlbz2list(void); static void requestfile(struct dcpeer *peer); +static void updatelists(int now); static int reservedchar(unsigned char c) { @@ -3512,11 +3514,31 @@ static void updatexmlbz2list(void) fclose(real); } -static int shareupdate(unsigned long long uusharesize, void *data) +static void listtimercb(int cancelled, void *uudata) +{ + listwritetimer = NULL; + if(!cancelled) + updatelists(1); +} + +static void updatelists(int now) { + if(!now) + { + if(listwritetimer == NULL) + listwritetimer = timercallback(ntime() + 300, listtimercb, NULL); + return; + } + if(listwritetimer != NULL) + canceltimer(listwritetimer); updatehmlist(); updatexmllist(); updatexmlbz2list(); +} + +static int shareupdate(unsigned long long uusharesize, void *data) +{ + updatelists(0); return(0); }