0
0
mirror of https://github.com/phpv8/v8js.git synced 2024-09-19 21:15:19 +00:00

Fix init/shutdown of v8js_globals.

The mutex/map/stack constructor/destructors weren't being properly called.
This commit is contained in:
C. Scott Ananian 2013-10-26 01:19:34 -04:00
parent 17381525f1
commit 527e636b25

39
v8js.cc
View File

@ -1562,18 +1562,6 @@ static void php_v8js_force_v8_gc(void) /* {{{ */
static PHP_MSHUTDOWN_FUNCTION(v8js) static PHP_MSHUTDOWN_FUNCTION(v8js)
{ {
UNREGISTER_INI_ENTRIES(); UNREGISTER_INI_ENTRIES();
if (V8JSG(extensions)) {
zend_hash_destroy(V8JSG(extensions));
free(V8JSG(extensions));
V8JSG(extensions) = NULL;
}
if (V8JSG(v8_flags)) {
free(V8JSG(v8_flags));
V8JSG(v8_flags) = NULL;
}
return SUCCESS; return SUCCESS;
} }
/* }}} */ /* }}} */
@ -1629,10 +1617,35 @@ static PHP_GINIT_FUNCTION(v8js)
{ {
v8js_globals->extensions = NULL; v8js_globals->extensions = NULL;
v8js_globals->disposed_contexts = 0; v8js_globals->disposed_contexts = 0;
v8js_globals->max_disposed_contexts = 0;
v8js_globals->v8_initialized = 0; v8js_globals->v8_initialized = 0;
v8js_globals->v8_flags = NULL; v8js_globals->v8_flags = NULL;
v8js_globals->timer_thread = NULL; v8js_globals->timer_thread = NULL;
v8js_globals->timer_stop = false; v8js_globals->timer_stop = false;
new(&v8js_globals->timer_mutex) std::mutex;
new(&v8js_globals->timer_stack) std::stack<php_v8js_timer_ctx *>;
new(&v8js_globals->modules_loaded) std::map<char *, v8::Handle<v8::Object>>;
}
/* }}} */
/* {{{ PHP_GSHUTDOWN_FUNCTION
*/
static PHP_GSHUTDOWN_FUNCTION(v8js)
{
if (v8js_globals->extensions) {
zend_hash_destroy(v8js_globals->extensions);
free(v8js_globals->extensions);
v8js_globals->extensions = NULL;
}
if (v8js_globals->v8_flags) {
free(v8js_globals->v8_flags);
v8js_globals->v8_flags = NULL;
}
v8js_globals->timer_stack.~stack();
v8js_globals->timer_mutex.~mutex();
v8js_globals->modules_loaded.~map();
} }
/* }}} */ /* }}} */
@ -1658,7 +1671,7 @@ zend_module_entry v8js_module_entry = {
V8JS_VERSION, V8JS_VERSION,
PHP_MODULE_GLOBALS(v8js), PHP_MODULE_GLOBALS(v8js),
PHP_GINIT(v8js), PHP_GINIT(v8js),
NULL, PHP_GSHUTDOWN(v8js),
NULL, NULL,
STANDARD_MODULE_PROPERTIES_EX STANDARD_MODULE_PROPERTIES_EX
}; };