summaryrefslogtreecommitdiff
path: root/common/queue.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/queue.c')
-rw-r--r--common/queue.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/common/queue.c b/common/queue.c
index 70b4bd40d0..6e5e9e65ad 100644
--- a/common/queue.c
+++ b/common/queue.c
@@ -7,9 +7,21 @@
#include "queue.h"
#include "util.h"
+static void queue_action_null(struct queue_policy const *policy, size_t count)
+{
+}
+
+struct queue_policy const queue_policy_null = {
+ .add = queue_action_null,
+ .remove = queue_action_null,
+};
+
void queue_init(struct queue const *q)
{
ASSERT(POWER_OF_TWO(q->buffer_units));
+ ASSERT(q->policy);
+ ASSERT(q->policy->add);
+ ASSERT(q->policy->remove);
q->state->head = 0;
q->state->tail = 0;
@@ -44,6 +56,8 @@ size_t queue_add_unit(struct queue const *q, void const *src)
q->state->tail += 1;
+ q->policy->add(q->policy, 1);
+
return 1;
}
@@ -74,6 +88,8 @@ size_t queue_add_memcpy(struct queue const *q,
q->state->tail += transfer;
+ q->policy->add(q->policy, transfer);
+
return transfer;
}
@@ -111,6 +127,8 @@ size_t queue_remove_unit(struct queue const *q, void *dest)
q->state->head += 1;
+ q->policy->remove(q->policy, 1);
+
return 1;
}
@@ -133,6 +151,8 @@ size_t queue_remove_memcpy(struct queue const *q,
q->state->head += transfer;
+ q->policy->remove(q->policy, transfer);
+
return transfer;
}