1
/* John McCutchan <jmccutchan@novell.com> 2005 */
3
#include "server_config.h"
12
#include "gam_protocol.h"
13
#include "gam_error.h"
16
// #define GAM_EQ_VERBOSE
24
static gam_eq_event_t *
25
gam_eq_event_new (int reqno, int event, const char *path, int len)
27
gam_eq_event_t *eq_event = NULL;
29
eq_event = g_new0(gam_eq_event_t, 1);
30
eq_event->reqno = reqno;
31
eq_event->event = event;
32
eq_event->path = g_strdup (path);
39
gam_eq_event_free (gam_eq_event_t *event)
57
eq = g_new0(struct _gam_eq, 1);
58
eq->event_queue = g_queue_new ();
64
gam_eq_free (gam_eq_t *eq)
69
while (!g_queue_is_empty (eq->event_queue))
71
gam_eq_event_t *event = g_queue_pop_head (eq->event_queue);
73
gam_eq_event_free (event);
75
g_queue_free (eq->event_queue);
80
gam_eq_queue (gam_eq_t *eq, int reqno, int event, const char *path, int len)
82
gam_eq_event_t *eq_event;
87
eq_event = g_queue_peek_tail (eq->event_queue);
89
/* Check if the last event in the event queue is the same as the one we are attempting to queue
90
* if it is, we can throw this new event away
92
if (eq_event && eq_event->reqno == reqno &&
93
eq_event->len == len &&
94
eq_event->event == event &&
95
!strcmp(eq_event->path, path))
98
GAM_DEBUG(DEBUG_INFO, "gam_eq: Didn't queue duplicate event\n");
102
eq_event = gam_eq_event_new (reqno, event, path, len);
103
g_queue_push_tail (eq->event_queue, eq_event);
107
gam_eq_size (gam_eq_t *eq)
112
return g_queue_get_length (eq->event_queue);
116
gam_eq_flush_callback (gam_eq_t *eq, gam_eq_event_t *event, GamConnDataPtr conn)
118
gam_send_event (conn, event->reqno, event->event, event->path, event->len);
119
gam_eq_event_free (event);
123
gam_eq_flush (gam_eq_t *eq, GamConnDataPtr conn)
125
gboolean done_work = FALSE;
129
#ifdef GAM_EQ_VERBOSE
130
GAM_DEBUG(DEBUG_INFO, "gam_eq: Flushing event queue for %s\n", gam_connection_get_pidname (conn));
132
while (!g_queue_is_empty (eq->event_queue))
135
gam_eq_event_t *event = g_queue_pop_head (eq->event_queue);
137
gam_eq_flush_callback (eq, event, conn);