From 6305c428814bad7215d3f7649cafaf264e68af13 Mon Sep 17 00:00:00 2001 From: fredrik Date: Mon, 8 Jan 2007 19:20:38 +0000 Subject: [PATCH] Rate limit filelist updates. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@809 959494ce-11ee-0310-bf91-de5d638817bd --- daemon/fnet-dc.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) 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); } -- 2.11.0