2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-03 16:15:27 +00:00

tagged event support

This commit is contained in:
Bob Halley
1999-06-15 23:18:18 +00:00
parent 3bb3f7ca61
commit 07697f1c52
2 changed files with 19 additions and 12 deletions

View File

@@ -180,7 +180,7 @@ isc_task_send(isc_task_t *task, isc_event_t **eventp);
unsigned int unsigned int
isc_task_purgerange(isc_task_t *task, void *sender, isc_eventtype_t first, 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. * 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 * Events whose sender is 'sender', and whose type is >= first and
* <= last will be purged, unless they are marked as unpurgable. * <= 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: * Returns:
* *
@@ -202,7 +203,8 @@ isc_task_purgerange(isc_task_t *task, void *sender, isc_eventtype_t first,
*/ */
unsigned int 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. * 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 * This function is equivalent to
* *
* isc_task_purgerange(task, sender, type, type); * isc_task_purgerange(task, sender, type, type, tag);
* *
* Requires: * 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' * Events whose sender is 'sender', and whose type is 'type'
* will be purged, unless they are marked as unpurgable. * 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: * Returns:
* *

View File

@@ -331,7 +331,7 @@ isc_task_send(isc_task_t *task, isc_event_t **eventp) {
unsigned int unsigned int
isc_task_purgerange(isc_task_t *task, void *sender, isc_eventtype_t first, 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_event_t *event, *next_event;
isc_eventlist_t purgeable; 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(VALID_TASK(task));
REQUIRE(last >= first); REQUIRE(last >= first);
XTRACE("purgerange");
/* /*
* Events matching 'sender' and whose type is >= first and * Events matching 'sender' and whose type is >= first and
* <= last will be purged, unless they are marked as unpurgable. * <= 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 != NULL;
event = next_event) { event = next_event) {
next_event = NEXT(event, link); next_event = NEXT(event, link);
if ((sender == NULL || event->sender == sender) && if (event->type >= first && event->type <= last &&
event->type >= first && (sender == NULL || event->sender == sender) &&
event->type <= last && (tag == 0 || event->tag == tag) &&
(event->attributes & ISC_EVENTATTR_NOPURGE) == 0) { (event->attributes & ISC_EVENTATTR_NOPURGE) == 0) {
DEQUEUE(task->events, event, link); DEQUEUE(task->events, event, link);
ENQUEUE(purgeable, 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 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. * 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 isc_boolean_t