From 07697f1c52ce97ff2255bb6d1e979b80bd2adc3d Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Tue, 15 Jun 1999 23:18:18 +0000 Subject: [PATCH] tagged event support --- lib/isc/include/isc/task.h | 13 ++++++++----- lib/isc/task.c | 18 +++++++++++------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/lib/isc/include/isc/task.h b/lib/isc/include/isc/task.h index fac00f8c0b..887a162d7a 100644 --- a/lib/isc/include/isc/task.h +++ b/lib/isc/include/isc/task.h @@ -180,7 +180,7 @@ isc_task_send(isc_task_t *task, isc_event_t **eventp); unsigned int isc_task_purgerange(isc_task_t *task, void *sender, isc_eventtype_t first, - isc_eventtype_t last); + isc_eventtype_t last, unsigned int tag); /* * Purge events from a task's event queue. * @@ -194,7 +194,8 @@ isc_task_purgerange(isc_task_t *task, void *sender, isc_eventtype_t first, * * Events whose sender is 'sender', and whose type is >= first and * <= last will be purged, unless they are marked as unpurgable. - * A sender of NULL will match any sender. + * A sender of NULL will match any sender. A tag of zero matches any + * tag. * * Returns: * @@ -202,7 +203,8 @@ isc_task_purgerange(isc_task_t *task, void *sender, isc_eventtype_t first, */ unsigned int -isc_task_purge(isc_task_t *task, void *sender, isc_eventtype_t type); +isc_task_purge(isc_task_t *task, void *sender, isc_eventtype_t type, + unsigned int tag); /* * Purge events from a task's event queue. * @@ -210,7 +212,7 @@ isc_task_purge(isc_task_t *task, void *sender, isc_eventtype_t type); * * This function is equivalent to * - * isc_task_purgerange(task, sender, type, type); + * isc_task_purgerange(task, sender, type, type, tag); * * Requires: * @@ -222,7 +224,8 @@ isc_task_purge(isc_task_t *task, void *sender, isc_eventtype_t type); * * Events whose sender is 'sender', and whose type is 'type' * will be purged, unless they are marked as unpurgable. - * A sender of NULL will match any sender. + * A sender of NULL will match any sender. A tag of zero matches any + * tag. * * Returns: * diff --git a/lib/isc/task.c b/lib/isc/task.c index 1b89223c4a..57befd2db3 100644 --- a/lib/isc/task.c +++ b/lib/isc/task.c @@ -331,7 +331,7 @@ isc_task_send(isc_task_t *task, isc_event_t **eventp) { unsigned int isc_task_purgerange(isc_task_t *task, void *sender, isc_eventtype_t first, - isc_eventtype_t last) + isc_eventtype_t last, unsigned int tag) { isc_event_t *event, *next_event; isc_eventlist_t purgeable; @@ -344,6 +344,9 @@ isc_task_purgerange(isc_task_t *task, void *sender, isc_eventtype_t first, REQUIRE(VALID_TASK(task)); REQUIRE(last >= first); + + XTRACE("purgerange"); + /* * Events matching 'sender' and whose type is >= first and * <= last will be purged, unless they are marked as unpurgable. @@ -360,9 +363,9 @@ isc_task_purgerange(isc_task_t *task, void *sender, isc_eventtype_t first, event != NULL; event = next_event) { next_event = NEXT(event, link); - if ((sender == NULL || event->sender == sender) && - event->type >= first && - event->type <= last && + if (event->type >= first && event->type <= last && + (sender == NULL || event->sender == sender) && + (tag == 0 || event->tag == tag) && (event->attributes & ISC_EVENTATTR_NOPURGE) == 0) { DEQUEUE(task->events, event, link); ENQUEUE(purgeable, event, link); @@ -382,13 +385,14 @@ isc_task_purgerange(isc_task_t *task, void *sender, isc_eventtype_t first, } unsigned int -isc_task_purge(isc_task_t *task, void *sender, isc_eventtype_t type) { - +isc_task_purge(isc_task_t *task, void *sender, isc_eventtype_t type, + unsigned int tag) +{ /* * Purge events from a task's event queue. */ - return (isc_task_purgerange(task, sender, type, type)); + return (isc_task_purgerange(task, sender, type, type, tag)); } isc_boolean_t