NNTPC: Update daemon retries after failure to get list?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I wrote:
> Ronald Florence wrote:
> > 
> > I don't see or understand why, but with that patch in place, nntpcache
> > ignores the rebuild intervals in the config file and fetches every
> > list on every connection.  Something is awry!
> 
> I see what's wrong now.  The update only happens in the child, and the values
> doesn't affect the parent.  What used to happen was that the parent sets the
> values in any case and it usually worked fine.  For now just back out the patch
> until I can think of what to do with this.

OK, here's an ugly hack that seems to work for me.  Please try it out.  It's
against a vanilla 1.0.1.

Julian: Is it possible to rearranges the startup a little so that open_mmap
is done before load_servers? That would remove a bit of the kludge here.

-- 
Debian GNU/Linux 1.2 is out! { http://www.debian.org/ }
Email:  Herbert Xu ~{PmV>HI~} <herbert@greathan.apana.org.au>
{ http://greathan.apana.org.au/~herbert/ }
PGP Key:  pgp-public-keys@pgp.mit.edu or any other key sites
--
diff -ur --new-file nntpcache-1.0.1.orig/list.c nntpcache-1.0.1/list.c
--- nntpcache-1.0.1.orig/list.c	Sat Nov  9 07:29:00 1996
+++ nntpcache-1.0.1/list.c	Fri Feb 14 11:38:04 1997
@@ -552,19 +551,19 @@
 			{
 			case l_active:
 				timeout = scfg->active_timeout;
-				rebuild = scfg->active_rebuild;
+				rebuild = scfg->rebuild_time->active_rebuild;
 				break;
 			case l_active_times:
 				timeout = scfg->active_times_timeout;
-				rebuild = scfg->active_times_rebuild;
+				rebuild = scfg->rebuild_time->active_times_rebuild;
 				break;
 			case l_newsgroups:
 				timeout = scfg->newsgroups_timeout;
-				rebuild = scfg->newsgroups_rebuild;
+				rebuild = scfg->rebuild_time->newsgroups_rebuild;
 				break;
 			case l_overview_fmt:
 				timeout = scfg->overview_fmt_timeout;
-				rebuild = scfg->overview_fmt_rebuild;
+				rebuild = scfg->rebuild_time->overview_fmt_rebuild;
 				break;
 			default:
 				break;
@@ -593,30 +592,30 @@
 			{
 				if (pid>0)
 					if (getListServer(list, scfg)>0)
-						scfg->overview_fmt_rebuild = tim;
+						scfg->rebuild_time->overview_fmt_rebuild = tim;
 			} else
 				if (pid == 0)
 #endif
-					getListServer(list, scfg);
-			switch (list->type)
-			{
-			case l_active:
-				scfg->active_rebuild = tim;
-				break;
-			case l_active_times:
-				scfg->active_times_rebuild = tim;
-				break;
-			case l_newsgroups:
-				scfg->newsgroups_rebuild = tim;
-				break;
+			if (getListServer(list, scfg) > 0)
+				switch (list->type)
+				{
+				case l_active:
+					scfg->rebuild_time->active_rebuild = tim;
+					break;
+				case l_active_times:
+					scfg->rebuild_time->active_times_rebuild = tim;
+					break;
+				case l_newsgroups:
+					scfg->rebuild_time->newsgroups_rebuild = tim;
+					break;
 #ifndef MMALLOC
-			case l_overview_fmt:
-				scfg->overview_fmt_rebuild = tim;
-				break;
+				case l_overview_fmt:
+					scfg->rebuild_time->overview_fmt_rebuild = tim;
+					break;
 #endif
-			default:
-				break;
-			}
+				default:
+					break;
+				}
 		}
 	}
 #ifdef MMALLOC
diff -ur --new-file nntpcache-1.0.1.orig/ll.h nntpcache-1.0.1/ll.h
--- nntpcache-1.0.1.orig/ll.h	Sat Oct  5 19:18:31 1996
+++ nntpcache-1.0.1/ll.h	Fri Feb 14 11:31:06 1997
@@ -8,6 +8,13 @@
 	struct server_cfg *server_cfg;
 };
 
+struct rebuild_cfg {
+	time_t active_rebuild;	/* Last rebuild */
+	time_t active_times_rebuild;	/* Last rebuild */
+	time_t newsgroups_rebuild;	/* Last rebuild */
+	time_t overview_fmt_rebuild;	/* Last rebuild */
+};
+
 struct server_cfg {
 	struct server_cfg *next;
 	struct server_cfg *head;
@@ -15,13 +22,10 @@
         int fd;                 /* Socket fd. -1 means not connected */
         char *us;               /* Our bind address. From nntpcache.servers */
         FILE *fh;               /* A FILE struct for the descriptor (fdreopen()ed) */
+        struct rebuild_cfg *rebuild_time; /* Last Rebuild */
         int active_timeout;     /* Active timeout. From nntpcache.servers */
-	time_t active_rebuild;	/* Last rebuild */
         int active_times_timeout; /* Active.times timeout. From nntpcache.servers */
-	time_t active_times_rebuild;	/* Last rebuild */
         int newsgroups_timeout; /* Newsgroups timeout. From nntpcache.servers */
-	time_t newsgroups_rebuild;	/* Last rebuild */
-	time_t overview_fmt_rebuild;	/* Last rebuild */
         int xover_timeout;      /* Xover timeout. From nntpcache.servers */
 	int group_timeout;	/* group timeout */
 	int listgroup_timeout;	/* listgroup timeout */
diff -ur --new-file nntpcache-1.0.1.orig/nntpcache.c nntpcache-1.0.1/nntpcache.c
--- nntpcache-1.0.1.orig/nntpcache.c	Sat Nov  9 07:47:38 1996
+++ nntpcache-1.0.1/nntpcache.c	Fri Feb 14 11:57:11 1997
@@ -266,6 +268,16 @@
 	return TRUE;
 }
 
+static void set_rebuild_time()
+{
+        struct server_cfg *l;
+	for (l=ServerList; l; l=l->next)
+	{
+		if (!l->rebuild_time)
+			l->rebuild_time = XMcalloc(1, sizeof *l->rebuild_time);
+	}
+}
+
 static bool load_servers(char *file)
 {
 	FILE *fp;
@@ -361,6 +373,7 @@
 		list->article_timeout = article_timeout;
 		list->overview_fmt_timeout = con.overviewFmtTimeout;
 		list->fd=-1;
+		list->rebuild_time = 0;
 	}
 	if (ferror(fp))
 	{


[Index of Archives]     [Yosemite]     [Yosemite Campsites]     [Bugtraq]     [Linux]     [Trn]

Powered by Linux