diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2018-11-15 21:34:02 +0100 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2018-11-15 21:34:46 +0100 |
| commit | 2766a8e66bb6bb9baa3ac5da276bcf995101a50c (patch) | |
| tree | cc4d0a93c12852a117d12004135de94e33a9f172 | |
| parent | 022eea8be1d0a49446b1b52c3f4719717234ccd8 (diff) | |
| download | php-git-2766a8e66bb6bb9baa3ac5da276bcf995101a50c.tar.gz | |
Fix leaks
For some reason I'm no longer getting memory leak errors for my
local build :/
| -rw-r--r-- | ext/spl/spl_heap.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c index 8e644df76e..0993cd4b5e 100644 --- a/ext/spl/spl_heap.c +++ b/ext/spl/spl_heap.c @@ -105,10 +105,12 @@ static void spl_ptr_heap_zval_ctor(zval *elem) { /* {{{ */ /* }}} */ static void spl_ptr_heap_pqueue_elem_dtor(zval *zv) { /* {{{ */ - spl_pqueue_elem *elem = Z_PTR_P(zv); - zval_ptr_dtor(&elem->data); - zval_ptr_dtor(&elem->priority); - efree(elem); + if (!Z_ISUNDEF_P(zv)) { + spl_pqueue_elem *elem = Z_PTR_P(zv); + zval_ptr_dtor(&elem->data); + zval_ptr_dtor(&elem->priority); + efree(elem); + } } /* }}} */ @@ -702,6 +704,7 @@ SPL_METHOD(SplPriorityQueue, extract) } spl_pqueue_extract_helper(return_value, &value, intern->flags); + spl_ptr_heap_pqueue_elem_dtor(&value); } /* }}} */ @@ -958,8 +961,7 @@ static void spl_heap_it_move_forward(zend_object_iterator *iter) /* {{{ */ } spl_ptr_heap_delete_top(object->heap, &elem, &iter->data); - - zval_ptr_dtor(&elem); + object->heap->dtor(&elem); zend_user_it_invalidate_current(iter); } @@ -985,13 +987,13 @@ SPL_METHOD(SplHeap, next) { spl_heap_object *intern = Z_SPLHEAP_P(ZEND_THIS); zval elem; - spl_ptr_heap_delete_top(intern->heap, &elem, ZEND_THIS); if (zend_parse_parameters_none() == FAILURE) { return; } - zval_ptr_dtor(&elem); + spl_ptr_heap_delete_top(intern->heap, &elem, ZEND_THIS); + intern->heap->dtor(&elem); } /* }}} */ |
