From 21a5253ea98a20239457e3c4f785431d14d64de6 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sat, 13 Sep 2014 22:05:37 +0200 Subject: [PATCH] Make zend_llist_remove_tail a void function The returned data is already dtored and freed at this point. --- Zend/zend_llist.c | 38 ++++++++++++++++---------------------- Zend/zend_llist.h | 2 +- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/Zend/zend_llist.c b/Zend/zend_llist.c index ad74bd56cb..0fb49abf5b 100644 --- a/Zend/zend_llist.c +++ b/Zend/zend_llist.c @@ -126,32 +126,26 @@ ZEND_API void zend_llist_clean(zend_llist *l) } -ZEND_API void *zend_llist_remove_tail(zend_llist *l) +ZEND_API void zend_llist_remove_tail(zend_llist *l) { - zend_llist_element *old_tail; - void *data; - - if ((old_tail = l->tail)) { - if (old_tail->prev) { - old_tail->prev->next = NULL; - } else { - l->head = NULL; - } - - data = old_tail->data; - - l->tail = old_tail->prev; - if (l->dtor) { - l->dtor(data); - } - pefree(old_tail, l->persistent); - - --l->count; + zend_llist_element *old_tail = l->tail; + if (!old_tail) { + return; + } - return data; + if (old_tail->prev) { + old_tail->prev->next = NULL; + } else { + l->head = NULL; } - return NULL; + l->tail = old_tail->prev; + --l->count; + + if (l->dtor) { + l->dtor(old_tail->data); + } + pefree(old_tail, l->persistent); } diff --git a/Zend/zend_llist.h b/Zend/zend_llist.h index b05ece8077..602884c27d 100644 --- a/Zend/zend_llist.h +++ b/Zend/zend_llist.h @@ -53,7 +53,7 @@ ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element); ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int (*compare)(void *element1, void *element2)); ZEND_API void zend_llist_destroy(zend_llist *l); ZEND_API void zend_llist_clean(zend_llist *l); -ZEND_API void *zend_llist_remove_tail(zend_llist *l); +ZEND_API void zend_llist_remove_tail(zend_llist *l); ZEND_API void zend_llist_copy(zend_llist *dst, zend_llist *src); ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func TSRMLS_DC); ZEND_API void zend_llist_apply_with_del(zend_llist *l, int (*func)(void *data)); -- 2.40.0