--- gamin-0.1.7/server/gam_eq.c.timer-on-demand 2005-08-05 11:57:48.000000000 +0200
+++ gamin-0.1.7/server/gam_eq.c 2006-09-05 10:57:06.000000000 +0200
@@ -119,9 +119,10 @@
gam_eq_event_free (event);
}
-void
+gboolean
gam_eq_flush (gam_eq_t *eq, GamConnDataPtr conn)
{
+ gboolean done_work = FALSE;
if (!eq)
return;
@@ -130,8 +131,10 @@
#endif
while (!g_queue_is_empty (eq->event_queue))
{
+ done_work = TRUE;
gam_eq_event_t *event = g_queue_pop_head (eq->event_queue);
g_assert (event);
gam_eq_flush_callback (eq, event, conn);
}
+ return done_work;
}
--- gamin-0.1.7/server/gam_connection.c.timer-on-demand 2005-09-22 10:10:55.000000000 +0200
+++ gamin-0.1.7/server/gam_connection.c 2006-09-05 10:57:06.000000000 +0200
@@ -159,12 +159,15 @@
static gboolean
gam_connection_eq_flush (gpointer data)
{
+ gboolean work;
GamConnDataPtr conn = (GamConnDataPtr)data;
if (!conn)
return FALSE;
- gam_eq_flush (conn->eq, conn);
- return TRUE;
+ work = gam_eq_flush (conn->eq, conn);
+ if (!work)
+ conn->eq_source = 0;
+ return work;
}
/**
@@ -193,7 +196,7 @@
ret->loop = loop;
ret->source = source;
ret->eq = gam_eq_new ();
- ret->eq_source = g_timeout_add (100 /* ms */, gam_connection_eq_flush, ret);
+ ret->eq_source = g_timeout_add (100 /* 100 milisecond */, gam_connection_eq_flush, ret);
gamConnList = g_list_prepend(gamConnList, ret);
GAM_DEBUG(DEBUG_INFO, "Created connection %d\n", ret->fd);
@@ -620,6 +623,8 @@
g_assert (conn->eq);
gam_eq_queue (conn->eq, reqno, event, path, len);
+ if (!conn->eq_source)
+ conn->eq_source = g_timeout_add (100 /* 100 milisecond */, gam_connection_eq_flush, conn);
}
--- gamin-0.1.7/server/gam_eq.h.timer-on-demand 2006-09-05 11:00:12.000000000 +0200
+++ gamin-0.1.7/server/gam_eq.h 2006-09-05 11:00:46.000000000 +0200
@@ -9,6 +9,6 @@
void gam_eq_free (gam_eq_t *eq);
void gam_eq_queue (gam_eq_t *eq, int reqno, int event, const char *path, int len);
guint gam_eq_size (gam_eq_t *eq);
-void gam_eq_flush (gam_eq_t *eq, GamConnDataPtr conn);
+gboolean gam_eq_flush (gam_eq_t *eq, GamConnDataPtr conn);
#endif