coroutine: switch to QSLIST
QSLIST can be used for a free list, do it. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
cf904cfa7c
commit
1bbbdabd56
@ -36,7 +36,7 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** Free list to speed up creation */
|
/** Free list to speed up creation */
|
||||||
static QLIST_HEAD(, Coroutine) pool = QLIST_HEAD_INITIALIZER(pool);
|
static QSLIST_HEAD(, Coroutine) pool = QSLIST_HEAD_INITIALIZER(pool);
|
||||||
static unsigned int pool_size;
|
static unsigned int pool_size;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -92,7 +92,7 @@ static void __attribute__((destructor)) coroutine_cleanup(void)
|
|||||||
Coroutine *co;
|
Coroutine *co;
|
||||||
Coroutine *tmp;
|
Coroutine *tmp;
|
||||||
|
|
||||||
QLIST_FOREACH_SAFE(co, &pool, pool_next, tmp) {
|
QSLIST_FOREACH_SAFE(co, &pool, pool_next, tmp) {
|
||||||
g_free(DO_UPCAST(CoroutineUContext, base, co)->stack);
|
g_free(DO_UPCAST(CoroutineUContext, base, co)->stack);
|
||||||
g_free(co);
|
g_free(co);
|
||||||
}
|
}
|
||||||
@ -175,9 +175,9 @@ Coroutine *qemu_coroutine_new(void)
|
|||||||
{
|
{
|
||||||
Coroutine *co;
|
Coroutine *co;
|
||||||
|
|
||||||
co = QLIST_FIRST(&pool);
|
co = QSLIST_FIRST(&pool);
|
||||||
if (co) {
|
if (co) {
|
||||||
QLIST_REMOVE(co, pool_next);
|
QSLIST_REMOVE_HEAD(&pool, pool_next);
|
||||||
pool_size--;
|
pool_size--;
|
||||||
} else {
|
} else {
|
||||||
co = coroutine_new();
|
co = coroutine_new();
|
||||||
@ -190,7 +190,7 @@ void qemu_coroutine_delete(Coroutine *co_)
|
|||||||
CoroutineUContext *co = DO_UPCAST(CoroutineUContext, base, co_);
|
CoroutineUContext *co = DO_UPCAST(CoroutineUContext, base, co_);
|
||||||
|
|
||||||
if (pool_size < POOL_MAX_SIZE) {
|
if (pool_size < POOL_MAX_SIZE) {
|
||||||
QLIST_INSERT_HEAD(&pool, &co->base, pool_next);
|
QSLIST_INSERT_HEAD(&pool, &co->base, pool_next);
|
||||||
co->base.caller = NULL;
|
co->base.caller = NULL;
|
||||||
pool_size++;
|
pool_size++;
|
||||||
return;
|
return;
|
||||||
|
@ -37,7 +37,7 @@ struct Coroutine {
|
|||||||
CoroutineEntry *entry;
|
CoroutineEntry *entry;
|
||||||
void *entry_arg;
|
void *entry_arg;
|
||||||
Coroutine *caller;
|
Coroutine *caller;
|
||||||
QLIST_ENTRY(Coroutine) pool_next;
|
QSLIST_ENTRY(Coroutine) pool_next;
|
||||||
QTAILQ_ENTRY(Coroutine) co_queue_next;
|
QTAILQ_ENTRY(Coroutine) co_queue_next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user