Skip to content
This repository was archived by the owner on Mar 29, 2024. It is now read-only.

Commit ed72501

Browse files
committed
Remove V8\Isolate::$snapshot private property
1 parent a3b349e commit ed72501

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+248
-578
lines changed

Diff for: scripts/replace_expect.php

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
}
4646

4747
continue;
48+
//} elseif (0) {
4849
} elseif (false !== ($pos = strpos($test_content, '--EXPECTF--'))) {
4950

5051
printf("--EXPECTF-- [%s]".PHP_EOL, $iterator->key());

Diff for: src/php_v8_isolate.cc

+11-25
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,12 @@ static void php_v8_isolate_free(zend_object *object) {
128128

129129
delete php_v8_isolate->create_params;
130130
}
131+
132+
if (php_v8_isolate->blob && php_v8_isolate->blob->release()) {
133+
delete php_v8_isolate->blob;
134+
}
135+
136+
php_v8_isolate->blob = nullptr;
131137
}
132138

133139
static void php_v8_isolate_oom_error_callback(const char *location, bool is_heap_oom) {
@@ -144,6 +150,7 @@ static zend_object *php_v8_isolate_ctor(zend_class_entry *ce) {
144150

145151
php_v8_init();
146152

153+
php_v8_isolate->blob = nullptr;
147154
php_v8_isolate->create_params = new v8::Isolate::CreateParams();
148155
php_v8_isolate->create_params->array_buffer_allocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator();
149156

@@ -191,9 +198,10 @@ static PHP_METHOD(V8Isolate, __construct) {
191198

192199
if (snapshot_zv != NULL) {
193200
PHP_V8_STARTUP_DATA_FETCH_INTO(snapshot_zv, php_v8_startup_data);
194-
zend_update_property(this_ce, getThis(), ZEND_STRL("snapshot"), snapshot_zv);
195-
196-
php_v8_isolate->create_params->snapshot_blob = php_v8_startup_data->blob;
201+
if (php_v8_startup_data->blob && php_v8_startup_data->blob->hasData()) {
202+
php_v8_isolate->blob = php_v8_startup_data->blob;
203+
php_v8_isolate->create_params->snapshot_blob = php_v8_isolate->blob->acquire();
204+
}
197205
}
198206

199207
php_v8_isolate->isolate = v8::Isolate::New(*php_v8_isolate->create_params);
@@ -313,21 +321,6 @@ static PHP_METHOD(V8Isolate, IsMemoryLimitHit) {
313321
RETVAL_ZVAL(prop, 1, 0);
314322
}
315323

316-
static PHP_METHOD(V8Isolate, GetSnapshot) {
317-
zval rv;
318-
319-
zval *prop = NULL;
320-
if (zend_parse_parameters_none() == FAILURE) {
321-
return;
322-
}
323-
324-
PHP_V8_ISOLATE_FETCH_WITH_CHECK(getThis(), php_v8_isolate);
325-
326-
prop = zend_read_property(this_ce, getThis(), ZEND_STRL("snapshot"), 0, &rv);
327-
328-
RETVAL_ZVAL(prop, 1, 0);
329-
}
330-
331324
static PHP_METHOD(V8Isolate, GetHeapStatistics) {
332325
if (zend_parse_parameters_none() == FAILURE) {
333326
return;
@@ -526,9 +519,6 @@ ZEND_END_ARG_INFO()
526519
PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_v8_isolate_IsMemoryLimitHit, ZEND_RETURN_VALUE, 0, _IS_BOOL, 0)
527520
ZEND_END_ARG_INFO()
528521

529-
PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_v8_isolate_GetSnapshot, ZEND_RETURN_VALUE, 0, V8\\StartupData, 1)
530-
ZEND_END_ARG_INFO()
531-
532522
PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_v8_isolate_GetHeapStatistics, ZEND_RETURN_VALUE, 0, V8\\HeapStatistics, 0)
533523
ZEND_END_ARG_INFO()
534524

@@ -586,8 +576,6 @@ static const zend_function_entry php_v8_isolate_methods[] = {
586576
PHP_ME(V8Isolate, GetMemoryLimit, arginfo_v8_isolate_GetMemoryLimit, ZEND_ACC_PUBLIC)
587577
PHP_ME(V8Isolate, IsMemoryLimitHit, arginfo_v8_isolate_IsMemoryLimitHit, ZEND_ACC_PUBLIC)
588578

589-
PHP_ME(V8Isolate, GetSnapshot, arginfo_v8_isolate_GetSnapshot, ZEND_ACC_PUBLIC)
590-
591579
PHP_ME(V8Isolate, GetHeapStatistics, arginfo_v8_isolate_GetHeapStatistics, ZEND_ACC_PUBLIC)
592580

593581
PHP_ME(V8Isolate, InContext, arginfo_v8_isolate_InContext, ZEND_ACC_PUBLIC)
@@ -616,8 +604,6 @@ PHP_MINIT_FUNCTION (php_v8_isolate) {
616604
this_ce = zend_register_internal_class(&ce);
617605
this_ce->create_object = php_v8_isolate_ctor;
618606

619-
zend_declare_property_null(this_ce, ZEND_STRL("snapshot"), ZEND_ACC_PRIVATE);
620-
621607
zend_declare_property_double(this_ce, ZEND_STRL("time_limit"), 0.0, ZEND_ACC_PRIVATE);
622608
zend_declare_property_bool(this_ce, ZEND_STRL("time_limit_hit"), 0, ZEND_ACC_PRIVATE);
623609

Diff for: src/php_v8_isolate.h

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
typedef struct _php_v8_isolate_t php_v8_isolate_t;
1717

18+
#include "php_v8_startup_data.h"
1819
#include "php_v8_isolate_limits.h"
1920
#include "php_v8_exceptions.h"
2021
#include "php_v8_callbacks.h"
@@ -119,6 +120,7 @@ inline v8::Local<v8::Private> php_v8_isolate_get_key_local(php_v8_isolate_t *php
119120
struct _php_v8_isolate_t {
120121
v8::Isolate *isolate;
121122
v8::Isolate::CreateParams *create_params;
123+
phpv8::StartupData *blob;
122124

123125
phpv8::PersistentCollection<v8::FunctionTemplate> *weak_function_templates;
124126
phpv8::PersistentCollection<v8::ObjectTemplate> *weak_object_templates;

Diff for: src/php_v8_startup_data.cc

+19-12
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,16 @@ void php_v8_startup_data_create(zval *return_value, v8::StartupData *blob) {
3131

3232
PHP_V8_STARTUP_DATA_FETCH_INTO(return_value, php_v8_startup_data);
3333

34-
php_v8_startup_data->blob = blob;
34+
php_v8_startup_data->blob = new phpv8::StartupData(blob);
3535
}
3636

3737
static void php_v8_startup_data_free(zend_object *object) {
3838
php_v8_startup_data_t *php_v8_startup_data = php_v8_startup_data_fetch_object(object);
3939

40-
if (php_v8_startup_data->blob) {
40+
if (php_v8_startup_data->blob && php_v8_startup_data->blob->release()) {
4141
delete php_v8_startup_data->blob;
4242
}
43+
php_v8_startup_data->blob = nullptr;
4344

4445
zend_object_std_dtor(&php_v8_startup_data->std);
4546
}
@@ -61,27 +62,28 @@ static zend_object *php_v8_startup_data_ctor(zend_class_entry *ce) {
6162
}
6263

6364
static PHP_METHOD(V8StartupData, __construct) {
64-
zend_string *blob = NULL;
65+
zend_string *blob_string = NULL;
6566

66-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &blob) == FAILURE) {
67+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &blob_string) == FAILURE) {
6768
return;
6869
}
6970

70-
if (ZSTR_LEN(blob) > INT_MAX) {
71+
if (ZSTR_LEN(blob_string) > INT_MAX) {
7172
PHP_V8_THROW_EXCEPTION("Failed to create startup blob due to blob size integer overflow");
7273
return;
7374
}
7475

75-
if (!ZSTR_LEN(blob)) {
76+
if (!ZSTR_LEN(blob_string)) {
7677
return;
7778
}
7879

7980
PHP_V8_STARTUP_DATA_FETCH_INTO(getThis(), php_v8_startup_data);
8081

81-
php_v8_startup_data->blob = new v8::StartupData();
82+
v8::StartupData *blob = new v8::StartupData();
83+
blob->data = (const char *) estrndup(ZSTR_VAL(blob_string), ZSTR_LEN(blob_string));
84+
blob->raw_size = static_cast<int>(ZSTR_LEN(blob_string));
8285

83-
php_v8_startup_data->blob->data = (const char *) estrndup(ZSTR_VAL(blob), ZSTR_LEN(blob));
84-
php_v8_startup_data->blob->raw_size = static_cast<int>(ZSTR_LEN(blob));
86+
php_v8_startup_data->blob = new phpv8::StartupData(blob);
8587
}
8688

8789
static PHP_METHOD(V8StartupData, GetData) {
@@ -91,8 +93,8 @@ static PHP_METHOD(V8StartupData, GetData) {
9193

9294
PHP_V8_STARTUP_DATA_FETCH_INTO(getThis(), php_v8_startup_data);
9395

94-
if (php_v8_startup_data->blob->data != NULL) {
95-
zend_string *out = zend_string_init(php_v8_startup_data->blob->data, static_cast<size_t>(php_v8_startup_data->blob->raw_size), 0);
96+
if (php_v8_startup_data->blob && php_v8_startup_data->blob->hasData()) {
97+
zend_string *out = zend_string_init(php_v8_startup_data->blob->data()->data, static_cast<size_t>(php_v8_startup_data->blob->data()->raw_size), 0);
9698
RETURN_STR(out);
9799
}
98100

@@ -106,7 +108,12 @@ static PHP_METHOD(V8StartupData, GetRawSize) {
106108

107109
PHP_V8_STARTUP_DATA_FETCH_INTO(getThis(), php_v8_startup_data);
108110

109-
RETVAL_LONG(static_cast<zend_long>(php_v8_startup_data->blob->raw_size));
111+
if (php_v8_startup_data->blob && php_v8_startup_data->blob->hasData()) {
112+
RETVAL_LONG(static_cast<zend_long>(php_v8_startup_data->blob->data()->raw_size));
113+
return;
114+
}
115+
116+
RETURN_LONG(0);
110117
}
111118

112119
static PHP_METHOD(V8StartupData, CreateFromSource) {

Diff for: src/php_v8_startup_data.h

+44-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515

1616
typedef struct _php_v8_startup_data_t php_v8_startup_data_t;
1717

18+
namespace phpv8 {
19+
class StartupData;
20+
}
21+
22+
#include "php_v8_exceptions.h"
1823
#include <v8.h>
1924

2025
extern "C" {
@@ -33,8 +38,46 @@ inline php_v8_startup_data_t * php_v8_startup_data_fetch_object(zend_object *obj
3338
#define PHP_V8_STARTUP_DATA_FETCH_INTO(pzval, into) php_v8_startup_data_t *(into) = PHP_V8_STARTUP_DATA_FETCH((pzval))
3439

3540

41+
namespace phpv8 {
42+
class StartupData {
43+
public:
44+
StartupData(v8::StartupData *data = nullptr) : _data(data), in_use(1) {}
45+
46+
inline v8::StartupData *acquire() {
47+
assert(in_use < UINT32_MAX);
48+
in_use++;
49+
return _data;
50+
}
51+
52+
inline bool hasData() {
53+
return _data && _data->raw_size > 0;
54+
}
55+
56+
inline v8::StartupData *data() {
57+
return _data;
58+
}
59+
60+
bool release() {
61+
assert(in_use > 0);
62+
return --in_use == 0;
63+
}
64+
65+
~StartupData() {
66+
if (_data) {
67+
delete _data;
68+
}
69+
}
70+
71+
v8::StartupData* operator*() const { return _data; }
72+
private:
73+
v8::StartupData *_data;
74+
uint32_t in_use;
75+
};
76+
}
77+
78+
3679
struct _php_v8_startup_data_t {
37-
v8::StartupData *blob;
80+
phpv8::StartupData *blob;
3881
zend_object std;
3982
};
4083

Diff for: stubs/src/Isolate.php

-17
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,6 @@
1717

1818
class Isolate
1919
{
20-
/**
21-
* @var StartupData | null
22-
*/
23-
private $snapshot;
24-
25-
private $time_limit = 0.0;
26-
private $time_limit_hit = false;
27-
private $memory_limit = 0;
28-
private $memory_limit_hit = false;
29-
3020
public function __construct(StartupData $snapshot = null)
3121
{
3222
}
@@ -55,13 +45,6 @@ public function IsTimeLimitHit(): bool
5545
{
5646
}
5747

58-
/**
59-
* @return StartupData | null
60-
*/
61-
public function GetSnapshot()
62-
{
63-
}
64-
6548
/**
6649
* Get statistics about the heap memory usage.
6750
*

0 commit comments

Comments
 (0)