浏览代码

Dispose persisted v8::Script object on resource dtor (memory leak)

Stefan Siegl 9 年之前
父节点
当前提交
cb7a1b8d6a
共有 1 个文件被更改,包括 7 次插入13 次删除
  1. 7 13
      v8js_class.cc

+ 7 - 13
v8js_class.cc

@@ -50,7 +50,7 @@ typedef struct _v8js_script {
 	v8::Persistent<v8::Script, v8::CopyablePersistentTraits<v8::Script>> *script;
 	v8::Persistent<v8::Script, v8::CopyablePersistentTraits<v8::Script>> *script;
 } v8js_script;
 } v8js_script;
 
 
-static void v8js_script_free(v8js_script *res, bool dispose_persistent);
+static void v8js_script_free(v8js_script *res);
 
 
 int le_v8js_script;
 int le_v8js_script;
 
 
@@ -545,7 +545,7 @@ static PHP_METHOD(V8Js, executeString)
 		RETURN_FALSE;
 		RETURN_FALSE;
 	}
 	}
 	v8js_execute_script(getThis(), res, flags, time_limit, memory_limit, &return_value TSRMLS_CC);
 	v8js_execute_script(getThis(), res, flags, time_limit, memory_limit, &return_value TSRMLS_CC);
-	v8js_script_free(res, true);
+	v8js_script_free(res);
 	efree(res);
 	efree(res);
 }
 }
 /* }}} */
 /* }}} */
@@ -611,7 +611,7 @@ static PHP_METHOD(V8Js, checkString)
 		RETURN_FALSE;
 		RETURN_FALSE;
 	}
 	}
 
 
-	v8js_script_free(res, true);
+	v8js_script_free(res);
 	efree(res);
 	efree(res);
 	RETURN_TRUE;
 	RETURN_TRUE;
 }
 }
@@ -768,23 +768,17 @@ static void v8js_persistent_zval_dtor(zval **p) /* {{{ */
 }
 }
 /* }}} */
 /* }}} */
 
 
-static void v8js_script_free(v8js_script *res, bool dispose_persistent)
+static void v8js_script_free(v8js_script *res)
 {
 {
-	if (res->name) {
-		efree(res->name);
-		res->name = NULL;
-	}
-	if (dispose_persistent) {
-		delete res->script; // does Reset()
-		res->script = NULL;
-	}
+	efree(res->name);
+	delete res->script; // does Reset()
 }
 }
 
 
 static void v8js_script_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
 static void v8js_script_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
 {
 {
 	v8js_script *res = (v8js_script *)rsrc->ptr;
 	v8js_script *res = (v8js_script *)rsrc->ptr;
 	if (res) {
 	if (res) {
-		v8js_script_free(res, false);
+		v8js_script_free(res);
 		efree(res);
 		efree(res);
 	}
 	}
 }
 }