From ae4ac9f69de3120004557824e0d766fe8140b27d Mon Sep 17 00:00:00 2001 From: Ben Fuhrmannek Date: Mon, 2 Aug 2021 19:19:23 +0200 Subject: properly free memory on shutdown --- src/sp_list.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/sp_list.c') diff --git a/src/sp_list.c b/src/sp_list.c index 0f00371..92e628d 100644 --- a/src/sp_list.c +++ b/src/sp_list.c @@ -1,8 +1,22 @@ #include "php_snuffleupagus.h" -void sp_list_free(sp_list_node *node) { +void sp_list_free(sp_list_node *node, void (*free_data_func)(void *data)) { while (node) { sp_list_node *tmp = node->next; + if (free_data_func && node->data) { + free_data_func(node->data); + } + pefree(node, 1); + node = tmp; + } +} + +void sp_list_free2(sp_list_node *node) { + while (node) { + sp_list_node *tmp = node->next; + if (node->data) { + pefree(node->data, 1); + } pefree(node, 1); node = tmp; } -- cgit v1.3 From 4d4ae75f0b843e06c666ea192a912316a9e1497c Mon Sep 17 00:00:00 2001 From: Ben Fuhrmannek Date: Sat, 5 Feb 2022 12:23:04 +0100 Subject: sp_list length --- src/sp_list.c | 6 ++++++ src/sp_list.h | 1 + 2 files changed, 7 insertions(+) (limited to 'src/sp_list.c') diff --git a/src/sp_list.c b/src/sp_list.c index 92e628d..ab752f7 100644 --- a/src/sp_list.c +++ b/src/sp_list.c @@ -75,3 +75,9 @@ sp_list_node *sp_list_prepend(sp_list_node *list, void *data) { new->data = data; return new; } + +size_t sp_list_len(sp_list_node *p) { + size_t num = 0; + for (; p; p = p->next) { num++; } + return num; +} diff --git a/src/sp_list.h b/src/sp_list.h index 7ceee50..81bbb29 100644 --- a/src/sp_list.h +++ b/src/sp_list.h @@ -13,5 +13,6 @@ sp_list_node *sp_list_insert(sp_list_node *, void *); sp_list_node *sp_list_prepend(sp_list_node *, void *); void sp_list_free(sp_list_node *, void (*free_data_func)(void *data)); void sp_list_free2(sp_list_node *node); +size_t sp_list_len(sp_list_node *p); #endif -- cgit v1.3