From 68a579f3aededc12aa78015115ee0e7fc1f39371 Mon Sep 17 00:00:00 2001 From: Stefan Siegl Date: Sat, 26 Oct 2013 17:54:12 +0200 Subject: [PATCH] Delete global PHP object on shutdown Deleting the global object implicitly deletes all the properties, i.e. PHP objects we previously attached to it (and for which we increased the reference counter). Since the following idle notifications trigger the weak callbacks, the references on the PHP objects are finally decreased. --- v8js.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/v8js.cc b/v8js.cc index f4ee898..f1d0621 100644 --- a/v8js.cc +++ b/v8js.cc @@ -511,7 +511,18 @@ static void php_v8js_free_storage(void *object TSRMLS_DC) /* {{{ */ if (c->pending_exception) { zval_ptr_dtor(&c->pending_exception); } - + + /* Delete PHP global object from JavaScript */ + if (!c->context.IsEmpty()) { + v8::Locker locker(c->isolate); + v8::Isolate::Scope isolate_scope(c->isolate); + v8::HandleScope handle_scope(c->isolate); + v8::Context::Scope context_scope(c->isolate, c->context); + + v8::Local object_name_js = v8::Local::New(c->isolate, c->object_name); + V8JS_GLOBAL->Delete(object_name_js); + } + c->object_name.Reset(); c->object_name.~Persistent(); c->global_template.Reset();