From: fredrik Date: Mon, 8 Jan 2007 19:20:38 +0000 (+0000) Subject: Rate limit filelist updates. X-Git-Tag: 0.3~118 X-Git-Url: http://dolda2000.com/gitweb/?p=doldaconnect.git;a=commitdiff_plain;h=6305c428814bad7215d3f7649cafaf264e68af13 Rate limit filelist updates. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@809 959494ce-11ee-0310-bf91-de5d638817bd --- 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); }