* 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);
if ((type == EV_READFD) || (type == EV_WRITEFD)) {
/* make sure we aren't given a high fd that will overflow a fd_set */
if (data >= FD_SETSIZE) {
- error("event_register: Invalid file descriptor %d", data);
+ error("event_register: Invalid file descriptor %lu", data);
/*NOTREACHED*/
}
#if !defined(__lint) /* Global checking knows that these are never called */
} else if (type == EV_SIG) {
/* make sure signals are within range */
if (data >= NSIG) {
- error("event_register: Invalid signal %d", data);
+ error("event_register: Invalid signal %lu", data);
/*NOTREACHED*/
}
if (sigtable[data].handle != NULL) {
- error("event_register: signal %d already registered", data);
+ error("event_register: signal %lu already registered", data);
/*NOTREACHED*/
}
} else if (type >= EV_DEAD) {
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 */