summaryrefslogtreecommitdiff
path: root/Zend/zend_string.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-02-17 22:30:35 +0400
committerDmitry Stogov <dmitry@zend.com>2014-02-17 22:30:35 +0400
commit4d6ff31cb31c661e3098d9dc07b156264dd39615 (patch)
treecdb8744c1bc400e15acfce58109f148454e341fd /Zend/zend_string.c
parentfc5e9bee29e95cf172e1416c6e725b7f444e5dc8 (diff)
downloadphp-git-4d6ff31cb31c661e3098d9dc07b156264dd39615.tar.gz
emalloced interned strings have to be deallocated before memory manager shutdown
Diffstat (limited to 'Zend/zend_string.c')
-rw-r--r--Zend/zend_string.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/Zend/zend_string.c b/Zend/zend_string.c
index 0fda838983..170cb2c200 100644
--- a/Zend/zend_string.c
+++ b/Zend/zend_string.c
@@ -189,10 +189,14 @@ static void zend_interned_strings_restore_int(TSRMLS_D)
while (idx > 0) {
idx--;
p = CG(interned_strings).arData + idx;
- if (!(p->key->gc.u.v.flags & IS_STR_PERMANENT)) break;
+ if (p->key->gc.u.v.flags & IS_STR_PERMANENT) break;
CG(interned_strings).nNumUsed--;
CG(interned_strings).nNumOfElements--;
+ p->key->gc.u.v.flags &= ~IS_STR_INTERNED;
+ p->key->gc.refcount = 1;
+ STR_FREE(p->key);
+
nIndex = p->h & CG(interned_strings).nTableMask;
if (CG(interned_strings).arHash[nIndex] == idx) {
CG(interned_strings).arHash[nIndex] = p->val.u.next;