diff options
| author | Ben Fuhrmannek | 2021-08-02 19:19:23 +0200 |
|---|---|---|
| committer | Ben Fuhrmannek | 2021-08-02 19:19:23 +0200 |
| commit | ae4ac9f69de3120004557824e0d766fe8140b27d (patch) | |
| tree | ef97751ab54357d5d74859b870ce84f4c6d044df /src/sp_list.c | |
| parent | 4cda0120313dfd5d71236f6faf87416e93f5f89c (diff) | |
properly free memory on shutdown
Diffstat (limited to 'src/sp_list.c')
| -rw-r--r-- | src/sp_list.c | 16 |
1 files changed, 15 insertions, 1 deletions
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 @@ | |||
| 1 | #include "php_snuffleupagus.h" | 1 | #include "php_snuffleupagus.h" |
| 2 | 2 | ||
| 3 | void sp_list_free(sp_list_node *node) { | 3 | void sp_list_free(sp_list_node *node, void (*free_data_func)(void *data)) { |
| 4 | while (node) { | 4 | while (node) { |
| 5 | sp_list_node *tmp = node->next; | 5 | sp_list_node *tmp = node->next; |
| 6 | if (free_data_func && node->data) { | ||
| 7 | free_data_func(node->data); | ||
| 8 | } | ||
| 9 | pefree(node, 1); | ||
| 10 | node = tmp; | ||
| 11 | } | ||
| 12 | } | ||
| 13 | |||
| 14 | void sp_list_free2(sp_list_node *node) { | ||
| 15 | while (node) { | ||
| 16 | sp_list_node *tmp = node->next; | ||
| 17 | if (node->data) { | ||
| 18 | pefree(node->data, 1); | ||
| 19 | } | ||
| 6 | pefree(node, 1); | 20 | pefree(node, 1); |
| 7 | node = tmp; | 21 | node = tmp; |
| 8 | } | 22 | } |
