* file named AUTHORS, in the root directory of this distribution.
*/
/*
- * $Id: event.c,v 1.24.2.1 2006/12/12 14:56:38 martinea Exp $
+ * $Id: event.c,v 1.24 2006/06/16 10:55:05 martinea Exp $
*
* Event handler. Serializes different kinds of events to allow for
* a uniform interface, central state storage, and centralized
* interdependency logic.
*/
-/*#define EVENT_DEBUG*/
-
-#ifdef EVENT_DEBUG
-#define eventprintf(x) dbprintf(x)
-#else
-#define eventprintf(x)
-#endif
-
#include "amanda.h"
#include "event.h"
#include "queue.h"
+#include "conffile.h"
+
+#define event_debug(i,x) do { \
+ if ((i) <= debug_event) { \
+ dbprintf(x); \
+ } \
+} while (0)
/*
* The opaque handle passed back to the caller. This is typedefed to
void (*oldhandler)(int);/* old handler (for unsetting) */
} sigtable[NSIG];
-#ifdef EVENT_DEBUG
static const char *event_type2str(event_type_t);
-#endif
#define fire(eh) (*(eh)->fn)((eh)->arg)
static void signal_handler(int);
static event_handle_t *gethandle(void);
eventq_add(eventq, handle);
eventq.qlength++;
- eventprintf(("%s: event: register: %p->data=%lu, type=%s\n",
- debug_prefix_time(NULL), handle, handle->data,
- event_type2str(handle->type)));
+ event_debug(1, ("%s: event: register: %p->data=%lu, type=%s\n",
+ debug_prefix_time(NULL), handle, handle->data,
+ event_type2str(handle->type)));
return (handle);
}
assert(handle != NULL);
- eventprintf(("%s: event: release (mark): %p data=%lu, type=%s\n",
- debug_prefix_time(NULL), handle, handle->data,
- event_type2str(handle->type)));
+ event_debug(1, ("%s: event: release (mark): %p data=%lu, type=%s\n",
+ debug_prefix_time(NULL), handle, handle->data,
+ event_type2str(handle->type)));
assert(handle->type != EV_DEAD);
/*
event_handle_t *eh;
int nwaken = 0;
- eventprintf(("%s: event: wakeup: enter (%lu)\n",
- debug_prefix_time(NULL), id));
+ event_debug(1, ("%s: event: wakeup: enter (%lu)\n",
+ debug_prefix_time(NULL), id));
for (eh = eventq_first(eventq); eh != NULL; eh = eventq_next(eh)) {
if (eh->type == EV_WAIT && eh->data == id) {
- eventprintf(("%s: event: wakeup: %p id=%lu\n",
- debug_prefix_time(NULL), eh, id));
+ event_debug(1, ("%s: event: wakeup: %p id=%lu\n",
+ debug_prefix_time(NULL), eh, id));
fire(eh);
nwaken++;
}
#ifdef ASSERTIONS
static int entry = 0;
#endif
- fd_set readfds, writefds, errfds, werrfds;
+ SELECT_ARG_TYPE readfds, writefds, errfds, werrfds;
struct timeval timeout, *tvptr;
int ntries, maxfd, rc;
long interval;
int event_wait_fired = 0;
int see_event;
- eventprintf(("%s: event: loop: enter: dontblock=%d, qlength=%d, eh=%p\n",
- debug_prefix_time(NULL),
- dontblock, eventq.qlength, wait_eh));
+ event_debug(1, ("%s: event: loop: enter: dontblock=%d, qlength=%d, eh=%p\n",
+ debug_prefix_time(NULL),
+ dontblock, eventq.qlength, wait_eh));
/*
* If we have no events, we have nothing to do
curtime = time(NULL);
do {
-#ifdef EVENT_DEBUG
- eventprintf(("%s: event: loop: dontblock=%d, qlength=%d eh=%p\n",
- debug_prefix_time(NULL), dontblock, eventq.qlength,
- wait_eh));
- for (eh = eventq_first(eventq); eh != NULL; eh = eventq_next(eh)) {
- eventprintf(("%s: %p): %s data=%lu fn=%p arg=%p\n",
- debug_prefix_time(NULL), eh,
- event_type2str(eh->type), eh->data, eh->fn,
- eh->arg));
+ if (debug_event >= 1) {
+ event_debug(1, ("%s: event: loop: dontblock=%d, qlength=%d eh=%p\n",
+ debug_prefix_time(NULL), dontblock, eventq.qlength,
+ wait_eh));
+ for (eh = eventq_first(eventq); eh != NULL; eh = eventq_next(eh)) {
+ event_debug(1, ("%s: %p): %s data=%lu fn=%p arg=%p\n",
+ debug_prefix_time(NULL), eh,
+ event_type2str(eh->type), eh->data, eh->fn,
+ eh->arg));
+ }
}
-#endif
/*
* Set ourselves up with no timeout initially.
*/
/*
* Let 'er rip
*/
- eventprintf((
- "%s: event: select: dontblock=%d, maxfd=%d, timeout=%ld\n",
- debug_prefix_time(NULL), dontblock, maxfd,
- tvptr != NULL ? timeout.tv_sec : -1));
+ event_debug(1,
+ ("%s: event: select: dontblock=%d, maxfd=%d, timeout=%ld\n",
+ debug_prefix_time(NULL), dontblock, maxfd,
+ tvptr != NULL ? timeout.tv_sec : -1));
rc = select(maxfd + 1, &readfds, &writefds, &errfds, tvptr);
- eventprintf(("%s: event: select returns %d\n",
- debug_prefix_time(NULL), rc));
+ event_debug(1, ("%s: event: select returns %d\n",
+ debug_prefix_time(NULL), rc));
/*
* Select errors can mean many things. Interrupted events should
cache.qlength++;
}
-#ifdef EVENT_DEBUG
/*
* Convert an event type into a string
*/
return (event_types[i].name);
return ("BOGUS EVENT TYPE");
}
-#endif /* EVENT_DEBUG */