All of lore.kernel.org
 help / color / mirror / Atom feed
* [Patch 1/2] CLD: factor timers out into a library
@ 2009-11-29  6:35 Pete Zaitcev
  2009-11-29 10:47 ` Jeff Garzik
  2009-11-29 11:11 ` Jeff Garzik
  0 siblings, 2 replies; 6+ messages in thread
From: Pete Zaitcev @ 2009-11-29  6:35 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Project Hail List

From: Jeff Garzik <jgarzik@redhat.com>

Move timer_init and friends so that they can be used by test/*.

Signed-Off-By: Pete Zaitcev <zaitcev@redhat.com>

---
 include/Makefile.am |    2 
 include/libtimer.h  |   34 ++++++++++++++++
 lib/.gitignore      |    2 
 lib/Makefile.am     |    2 
 lib/libtimer.c      |   83 ++++++++++++++++++++++++++++++++++++++++
 server/Makefile.am  |    3 -
 server/cld.h        |   25 ------------
 server/util.c       |   87 ------------------------------------------
 8 files changed, 125 insertions(+), 113 deletions(-)

commit 92da6100e5803526ce8acc907c23a5dba3aee758
Author: Master <zaitcev@lembas.zaitcev.lan>
Date:   Sat Nov 28 23:12:31 2009 -0700

    The libtimer by jgarzik.

diff --git a/include/Makefile.am b/include/Makefile.am
index 06e35a6..f7539dd 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1,5 +1,5 @@
 
-EXTRA_DIST = cld-private.h
+EXTRA_DIST = cld-private.h libtimer.h
 
 include_HEADERS = cldc.h cld_msg.h
 
diff --git a/include/libtimer.h b/include/libtimer.h
new file mode 100644
index 0000000..aedaea0
--- /dev/null
+++ b/include/libtimer.h
@@ -0,0 +1,34 @@
+
+#ifndef __LIBTIMER_H__
+#define __LIBTIMER_H__
+
+#include <stdbool.h>
+#include <string.h>
+#include <time.h>
+
+struct timer {
+	bool			fired;
+	bool			on_list;
+	void			(*cb)(struct timer *);
+	void			*userdata;
+	time_t			expires;
+	char			name[32];
+};
+
+extern void timer_add(struct timer *timer, time_t expires);
+extern void timer_del(struct timer *timer);
+extern time_t timers_run(void);
+
+static inline void timer_init(struct timer *timer, const char *name,
+			      void (*cb)(struct timer *),
+			      void *userdata)
+{
+	memset(timer, 0, sizeof(*timer));
+	timer->cb = cb;
+	timer->userdata = userdata;
+	strncpy(timer->name, name, sizeof(timer->name));
+	timer->name[sizeof(timer->name) - 1] = 0;
+}
+
+#endif /* __LIBTIMER_H__ */
+
diff --git a/lib/.gitignore b/lib/.gitignore
index 9eaa296..dddcc4c 100644
--- a/lib/.gitignore
+++ b/lib/.gitignore
@@ -6,5 +6,7 @@ libcldc.la
 libcldc-uninstalled.pc
 libcldc.pc
 
+libtimer.a
+
 .libs
 
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 5b042ef..68be429 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -16,6 +16,8 @@ libcldc_la_LDFLAGS = \
 	-no-undefined \
 	-export-symbols-regex "^[^_].*"
 
+noinst_LIBRARIES	= libtimer.a
+
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libcldc.pc
 
diff --git a/lib/libtimer.c b/lib/libtimer.c
new file mode 100644
index 0000000..c1bcaf1
--- /dev/null
+++ b/lib/libtimer.c
@@ -0,0 +1,83 @@
+
+#include <glib.h>
+#include <libtimer.h>
+
+static GList *timer_list;
+
+static gint timer_cmp(gconstpointer a_, gconstpointer b_)
+{
+	const struct timer *a = a_;
+	const struct timer *b = b_;
+
+	if (a->expires > b->expires)
+		return 1;
+	if (a->expires == b->expires)
+		return 0;
+	return -1;
+}
+
+void timer_add(struct timer *timer, time_t expires)
+{
+	if (timer->on_list)
+		timer_list = g_list_remove(timer_list, timer);
+
+	timer->on_list = true;
+	timer->fired = false;
+	timer->expires = expires;
+
+	timer_list = g_list_insert_sorted(timer_list, timer, timer_cmp);
+}
+
+void timer_del(struct timer *timer)
+{
+	if (!timer->on_list)
+		return;
+
+	timer_list = g_list_remove(timer_list, timer);
+
+	timer->on_list = false;
+}
+
+time_t timers_run(void)
+{
+	struct timer *timer;
+	time_t now = time(NULL);
+	time_t next_timeout = 0;
+	GList *tmp, *cur;
+	GList *exec_list = NULL;
+
+	tmp = timer_list;
+	while (tmp) {
+		timer = tmp->data;
+		cur = tmp;
+		tmp = tmp->next;
+
+		if (timer->expires > now)
+			break;
+
+		timer_list = g_list_remove_link(timer_list, cur);
+		exec_list = g_list_concat(exec_list, cur);
+
+		timer->on_list = false;
+	}
+
+	tmp = exec_list;
+	while (tmp) {
+		timer = tmp->data;
+		tmp = tmp->next;
+
+		timer->fired = true;
+		timer->cb(timer);
+	}
+
+	if (timer_list) {
+		timer = timer_list->data;
+		if (timer->expires > now)
+			next_timeout = (timer->expires - now);
+		else
+			next_timeout = 1;
+	}
+
+	return next_timeout;
+}
+
diff --git a/server/Makefile.am b/server/Makefile.am
index 929a3fd..d099b4a 100644
--- a/server/Makefile.am
+++ b/server/Makefile.am
@@ -8,7 +8,8 @@ sbin_PROGRAMS	= cld cldbadm
 cld_SOURCES	= cldb.h cld.h \
 		  ../lib/common.c \
 		  cldb.c msg.c server.c session.c util.c
-cld_LDADD	= @CRYPTO_LIBS@ @GLIB_LIBS@ @DB4_LIBS@ @ARGP_LIBS@
+cld_LDADD	= ../lib/libtimer.a \
+		  @CRYPTO_LIBS@ @GLIB_LIBS@ @DB4_LIBS@ @ARGP_LIBS@
 
 cldbadm_SOURCES	= cldb.h cldbadm.c
 cldbadm_LDADD	= @CRYPTO_LIBS@ @GLIB_LIBS@ @DB4_LIBS@ @ARGP_LIBS@
diff --git a/server/cld.h b/server/cld.h
index da26862..05c93ad 100644
--- a/server/cld.h
+++ b/server/cld.h
@@ -26,8 +26,8 @@
 #include <glib.h>
 #include "cldb.h"
 #include <cld_msg.h>
+#include <libtimer.h>
 
-struct timer;
 struct client;
 struct session_outpkt;
 
@@ -40,15 +40,6 @@ enum {
 	SFL_FOREGROUND		= (1 << 0),	/* run in foreground */
 };
 
-struct timer {
-	bool			fired;
-	bool			on_list;
-	void			(*cb)(struct timer *);
-	void			*userdata;
-	time_t			expires;
-	char			name[32];
-};
-
 struct client {
 	struct sockaddr_in6	addr;		/* inet address */
 	socklen_t		addr_len;	/* inet address len */
@@ -176,20 +167,6 @@ extern void applog(int prio, const char *fmt, ...);
 extern int write_pid_file(const char *pid_fn);
 extern void syslogerr(const char *prefix);
 extern int fsetflags(const char *prefix, int fd, int or_flags);
-extern void timer_add(struct timer *timer, time_t expires);
-extern void timer_del(struct timer *timer);
-extern time_t timers_run(void);
-
-static inline void timer_init(struct timer *timer, const char *name,
-			      void (*cb)(struct timer *),
-			      void *userdata)
-{
-	memset(timer, 0, sizeof(*timer));
-	timer->cb = cb;
-	timer->userdata = userdata;
-	strncpy(timer->name, name, sizeof(timer->name));
-	timer->name[sizeof(timer->name) - 1] = 0;
-}
 
 #ifndef HAVE_STRNLEN
 extern size_t strnlen(const char *s, size_t maxlen);
diff --git a/server/util.c b/server/util.c
index 3cd072f..36fa219 100644
--- a/server/util.c
+++ b/server/util.c
@@ -32,8 +32,6 @@
 #include <syslog.h>
 #include "cld.h"
 
-static GList *timer_list;
-
 int write_pid_file(const char *pid_fn)
 {
 	char str[32], *s;
@@ -133,91 +131,6 @@ int fsetflags(const char *prefix, int fd, int or_flags)
 	return rc;
 }
 
-static gint timer_cmp(gconstpointer a_, gconstpointer b_)
-{
-	const struct timer *a = a_;
-	const struct timer *b = b_;
-
-	if (a->expires > b->expires)
-		return 1;
-	if (a->expires == b->expires)
-		return 0;
-	return -1;
-}
-
-void timer_add(struct timer *timer, time_t expires)
-{
-	if (timer->on_list) {
-		timer_list = g_list_remove(timer_list, timer);
-
-		if (debugging)
-			applog(LOG_WARNING, "BUG? timer %s added twice "
-			       "(expires: old %llu, new %llu)",
-			       timer->name,
-			       (unsigned long long) timer->expires,
-			       (unsigned long long) expires);
-	}
-
-	timer->on_list = true;
-	timer->fired = false;
-	timer->expires = expires;
-
-	timer_list = g_list_insert_sorted(timer_list, timer, timer_cmp);
-}
-
-void timer_del(struct timer *timer)
-{
-	if (!timer->on_list)
-		return;
-
-	timer_list = g_list_remove(timer_list, timer);
-
-	timer->on_list = false;
-}
-
-time_t timers_run(void)
-{
-	struct timer *timer;
-	time_t now = time(NULL);
-	time_t next_timeout = 0;
-	GList *tmp, *cur;
-	GList *exec_list = NULL;
-
-	tmp = timer_list;
-	while (tmp) {
-		timer = tmp->data;
-		cur = tmp;
-		tmp = tmp->next;
-
-		if (timer->expires > now)
-			break;
-
-		timer_list = g_list_remove_link(timer_list, cur);
-		exec_list = g_list_concat(exec_list, cur);
-
-		timer->on_list = false;
-	}
-
-	tmp = exec_list;
-	while (tmp) {
-		timer = tmp->data;
-		tmp = tmp->next;
-
-		timer->fired = true;
-		timer->cb(timer);
-	}
-
-	if (timer_list) {
-		timer = timer_list->data;
-		if (timer->expires > now)
-			next_timeout = (timer->expires - now);
-		else
-			next_timeout = 1;
-	}
-
-	return next_timeout;
-}
-
 #ifndef HAVE_STRNLEN
 size_t strnlen(const char *s, size_t maxlen)
 {

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Patch 1/2] CLD: factor timers out into a library
  2009-11-29  6:35 [Patch 1/2] CLD: factor timers out into a library Pete Zaitcev
@ 2009-11-29 10:47 ` Jeff Garzik
  2009-11-29 11:11 ` Jeff Garzik
  1 sibling, 0 replies; 6+ messages in thread
From: Jeff Garzik @ 2009-11-29 10:47 UTC (permalink / raw)
  To: Pete Zaitcev; +Cc: Project Hail List

On 11/29/2009 01:35 AM, Pete Zaitcev wrote:
> From: Jeff Garzik<jgarzik@redhat.com>
>
> Move timer_init and friends so that they can be used by test/*.
>
> Signed-Off-By: Pete Zaitcev<zaitcev@redhat.com>

applied 1-2


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Patch 1/2] CLD: factor timers out into a library
  2009-11-29  6:35 [Patch 1/2] CLD: factor timers out into a library Pete Zaitcev
  2009-11-29 10:47 ` Jeff Garzik
@ 2009-11-29 11:11 ` Jeff Garzik
  2009-11-29 19:34   ` Pete Zaitcev
  1 sibling, 1 reply; 6+ messages in thread
From: Jeff Garzik @ 2009-11-29 11:11 UTC (permalink / raw)
  To: Pete Zaitcev; +Cc: Project Hail List

On 11/29/2009 01:35 AM, Pete Zaitcev wrote:
> From: Jeff Garzik<jgarzik@redhat.com>
>
> Move timer_init and friends so that they can be used by test/*.
>
> Signed-Off-By: Pete Zaitcev<zaitcev@redhat.com>

hmmm...  cld now segfaults reliably in koji:
http://koji.fedoraproject.org/koji/taskinfo?taskID=1836079
http://koji.fedoraproject.org/koji/taskinfo?taskID=1836084

Both of those are cld build attempts.  The second build attempt gives a 
db4-related error before dying, too.

	Jeff


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Patch 1/2] CLD: factor timers out into a library
  2009-11-29 11:11 ` Jeff Garzik
@ 2009-11-29 19:34   ` Pete Zaitcev
  2009-11-29 20:36     ` Jeff Garzik
  0 siblings, 1 reply; 6+ messages in thread
From: Pete Zaitcev @ 2009-11-29 19:34 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Project Hail List

On Sun, 29 Nov 2009 06:11:44 -0500 Jeff Garzik <jeff@garzik.org> wrote:

> hmmm...  cld now segfaults reliably in koji:
> http://koji.fedoraproject.org/koji/taskinfo?taskID=1836079

Curious. It works fine here, of course (make distcheck).
Did you try to build locally?

-- Pete

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Patch 1/2] CLD: factor timers out into a library
  2009-11-29 19:34   ` Pete Zaitcev
@ 2009-11-29 20:36     ` Jeff Garzik
  2009-11-29 23:50       ` Pete Zaitcev
  0 siblings, 1 reply; 6+ messages in thread
From: Jeff Garzik @ 2009-11-29 20:36 UTC (permalink / raw)
  To: Pete Zaitcev; +Cc: Project Hail List

On 11/29/2009 02:34 PM, Pete Zaitcev wrote:
> On Sun, 29 Nov 2009 06:11:44 -0500 Jeff Garzik<jeff@garzik.org>  wrote:
>
>> hmmm...  cld now segfaults reliably in koji:
>> http://koji.fedoraproject.org/koji/taskinfo?taskID=1836079
>
> Curious. It works fine here, of course (make distcheck).
> Did you try to build locally?

Tests work fine locally.  They fail 100% of the time in koji.

	Jeff



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Patch 1/2] CLD: factor timers out into a library
  2009-11-29 20:36     ` Jeff Garzik
@ 2009-11-29 23:50       ` Pete Zaitcev
  0 siblings, 0 replies; 6+ messages in thread
From: Pete Zaitcev @ 2009-11-29 23:50 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Project Hail List

On Sun, 29 Nov 2009 15:36:53 -0500, Jeff Garzik <jeff@garzik.org> wrote:
> On 11/29/2009 02:34 PM, Pete Zaitcev wrote:
> > On Sun, 29 Nov 2009 06:11:44 -0500 Jeff Garzik<jeff@garzik.org>  wrote:
> >
> >> hmmm...  cld now segfaults reliably in koji:
> >> http://koji.fedoraproject.org/koji/taskinfo?taskID=1836079
> >
> > Curious. It works fine here, of course (make distcheck).
> > Did you try to build locally?
> 
> Tests work fine locally.  They fail 100% of the time in koji.

This is an F13 buildroot, right? There may be some difference.
I must admit I only tested on F12. I'll handle this and keep you
updated.

-- Pete

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-11-29 23:50 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-29  6:35 [Patch 1/2] CLD: factor timers out into a library Pete Zaitcev
2009-11-29 10:47 ` Jeff Garzik
2009-11-29 11:11 ` Jeff Garzik
2009-11-29 19:34   ` Pete Zaitcev
2009-11-29 20:36     ` Jeff Garzik
2009-11-29 23:50       ` Pete Zaitcev

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.