@@ -55,10 +55,27 @@ enum Http2OptionsIndex {
55
55
IDX_OPTIONS_FLAGS
56
56
};
57
57
58
+ static uint32_t http2_padding_buffer[3 ];
59
+ static uint32_t http2_options_buffer[IDX_OPTIONS_FLAGS + 1 ];
60
+ static uint32_t http2_settings_buffer[IDX_SETTINGS_COUNT + 1 ];
61
+ static double http2_session_state_buffer[IDX_SESSION_STATE_COUNT];
62
+ static double http2_stream_state_buffer[IDX_STREAM_STATE_COUNT];
63
+
64
+ static const size_t http2_options_buffer_byte_length =
65
+ sizeof (http2_options_buffer) * (IDX_OPTIONS_FLAGS + 1 );
66
+ static const size_t http2_settings_buffer_byte_length =
67
+ sizeof (http2_settings_buffer) * (IDX_SETTINGS_COUNT + 1 );
68
+ static const size_t http2_padding_buffer_byte_length =
69
+ sizeof (http2_padding_buffer) * 3 ;
70
+ static const size_t http2_stream_state_buffer_byte_length =
71
+ sizeof (http2_stream_state_buffer) * IDX_STREAM_STATE_COUNT;
72
+ static const size_t http2_session_state_buffer_byte_length =
73
+ sizeof (http2_session_state_buffer) * IDX_SESSION_STATE_COUNT;
74
+
58
75
Http2Options::Http2Options (Environment* env) {
59
76
nghttp2_option_new (&options_);
60
77
61
- uint32_t * buffer = env-> http2_options_buffer () ;
78
+ uint32_t * buffer = http2_options_buffer;
62
79
uint32_t flags = buffer[IDX_OPTIONS_FLAGS];
63
80
64
81
if (flags & (1 << IDX_OPTIONS_MAX_DEFLATE_DYNAMIC_TABLE_SIZE)) {
@@ -148,7 +165,7 @@ ssize_t Http2Session::OnCallbackPadding(size_t frameLen,
148
165
Context::Scope context_scope (context);
149
166
150
167
if (object ()->Has (context, env ()->ongetpadding_string ()).FromJust ()) {
151
- uint32_t * buffer = env ()-> http2_padding_buffer () ;
168
+ uint32_t * buffer = http2_padding_buffer;
152
169
buffer[0 ] = frameLen;
153
170
buffer[1 ] = maxPayloadLen;
154
171
MakeCallback (env ()->ongetpadding_string (), 0 , nullptr );
@@ -189,7 +206,7 @@ void PackSettings(const FunctionCallbackInfo<Value>& args) {
189
206
std::vector<nghttp2_settings_entry> entries;
190
207
entries.reserve (6 );
191
208
192
- uint32_t * const buffer = env-> http2_settings_buffer () ;
209
+ uint32_t * buffer = http2_settings_buffer;
193
210
uint32_t flags = buffer[IDX_SETTINGS_COUNT];
194
211
195
212
if (flags & (1 << IDX_SETTINGS_HEADER_TABLE_SIZE)) {
@@ -248,8 +265,7 @@ void PackSettings(const FunctionCallbackInfo<Value>& args) {
248
265
// Used to fill in the spec defined initial values for each setting.
249
266
void RefreshDefaultSettings (const FunctionCallbackInfo<Value>& args) {
250
267
DEBUG_HTTP2 (" Http2Session: refreshing default settings\n " );
251
- Environment* env = Environment::GetCurrent (args);
252
- uint32_t * const buffer = env->http2_settings_buffer ();
268
+ uint32_t * buffer = http2_settings_buffer;
253
269
buffer[IDX_SETTINGS_HEADER_TABLE_SIZE] =
254
270
DEFAULT_SETTINGS_HEADER_TABLE_SIZE;
255
271
buffer[IDX_SETTINGS_ENABLE_PUSH] =
@@ -272,10 +288,9 @@ void RefreshSettings(const FunctionCallbackInfo<Value>& args) {
272
288
CHECK (args[0 ]->IsObject ());
273
289
Http2Session* session;
274
290
ASSIGN_OR_RETURN_UNWRAP (&session, args[0 ].As <Object>());
275
- Environment* env = session->env ();
276
291
nghttp2_session* s = session->session ();
277
292
278
- uint32_t * const buffer = env-> http2_settings_buffer () ;
293
+ uint32_t * buffer = http2_settings_buffer;
279
294
buffer[IDX_SETTINGS_HEADER_TABLE_SIZE] =
280
295
fn (s, NGHTTP2_SETTINGS_HEADER_TABLE_SIZE);
281
296
buffer[IDX_SETTINGS_MAX_CONCURRENT_STREAMS] =
@@ -295,8 +310,7 @@ void RefreshSessionState(const FunctionCallbackInfo<Value>& args) {
295
310
DEBUG_HTTP2 (" Http2Session: refreshing session state\n " );
296
311
CHECK_EQ (args.Length (), 1 );
297
312
CHECK (args[0 ]->IsObject ());
298
- Environment* env = Environment::GetCurrent (args);
299
- double * const buffer = env->http2_session_state_buffer ();
313
+ double * buffer = http2_session_state_buffer;
300
314
Http2Session* session;
301
315
ASSIGN_OR_RETURN_UNWRAP (&session, args[0 ].As <Object>());
302
316
nghttp2_session* s = session->session ();
@@ -333,7 +347,7 @@ void RefreshStreamState(const FunctionCallbackInfo<Value>& args) {
333
347
nghttp2_session* s = session->session ();
334
348
Nghttp2Stream* stream;
335
349
336
- double * const buffer = env-> http2_stream_state_buffer () ;
350
+ double * buffer = http2_stream_state_buffer;
337
351
338
352
if ((stream = session->FindStream (id)) == nullptr ) {
339
353
buffer[IDX_STREAM_STATE] = NGHTTP2_STREAM_STATE_IDLE;
@@ -438,9 +452,7 @@ void Http2Session::SubmitSettings(const FunctionCallbackInfo<Value>& args) {
438
452
Http2Session* session;
439
453
ASSIGN_OR_RETURN_UNWRAP (&session, args.Holder ());
440
454
441
- Environment* env = session->env ();
442
-
443
- uint32_t * const buffer = env->http2_settings_buffer ();
455
+ uint32_t * buffer = http2_settings_buffer;
444
456
uint32_t flags = buffer[IDX_SETTINGS_COUNT];
445
457
446
458
std::vector<nghttp2_settings_entry> entries;
@@ -1107,74 +1119,40 @@ void Initialize(Local<Object> target,
1107
1119
HandleScope scope (isolate);
1108
1120
1109
1121
// Initialize the buffer used for padding callbacks
1110
- env->set_http2_padding_buffer (new uint32_t [3 ]);
1111
- const size_t http2_padding_buffer_byte_length =
1112
- sizeof (*env->http2_padding_buffer ()) * 3 ;
1113
-
1114
1122
target->Set (context,
1115
1123
FIXED_ONE_BYTE_STRING (env->isolate (), " paddingArrayBuffer" ),
1116
1124
ArrayBuffer::New (env->isolate (),
1117
- env-> http2_padding_buffer () ,
1125
+ & http2_padding_buffer,
1118
1126
http2_padding_buffer_byte_length))
1119
1127
.FromJust ();
1120
1128
1121
1129
// Initialize the buffer used to store the session state
1122
- env->set_http2_session_state_buffer (
1123
- new double [IDX_SESSION_STATE_COUNT]);
1124
-
1125
- const size_t http2_session_state_buffer_byte_length =
1126
- sizeof (*env->http2_session_state_buffer ()) *
1127
- IDX_SESSION_STATE_COUNT;
1128
-
1129
1130
target->Set (context,
1130
1131
FIXED_ONE_BYTE_STRING (env->isolate (), " sessionStateArrayBuffer" ),
1131
1132
ArrayBuffer::New (env->isolate (),
1132
- env-> http2_session_state_buffer () ,
1133
+ & http2_session_state_buffer,
1133
1134
http2_session_state_buffer_byte_length))
1134
1135
.FromJust ();
1135
1136
1136
1137
// Initialize the buffer used to store the stream state
1137
- env->set_http2_stream_state_buffer (
1138
- new double [IDX_STREAM_STATE_COUNT]);
1139
-
1140
- const size_t http2_stream_state_buffer_byte_length =
1141
- sizeof (*env->http2_stream_state_buffer ()) *
1142
- IDX_STREAM_STATE_COUNT;
1143
-
1144
1138
target->Set (context,
1145
1139
FIXED_ONE_BYTE_STRING (env->isolate (), " streamStateArrayBuffer" ),
1146
1140
ArrayBuffer::New (env->isolate (),
1147
- env-> http2_stream_state_buffer () ,
1141
+ & http2_stream_state_buffer,
1148
1142
http2_stream_state_buffer_byte_length))
1149
1143
.FromJust ();
1150
1144
1151
- // Initialize the buffer used to store the current settings
1152
- env->set_http2_settings_buffer (
1153
- new uint32_t [IDX_SETTINGS_COUNT + 1 ]);
1154
-
1155
- const size_t http2_settings_buffer_byte_length =
1156
- sizeof (*env->http2_settings_buffer ()) *
1157
- (IDX_SETTINGS_COUNT + 1 );
1158
-
1159
1145
target->Set (context,
1160
1146
FIXED_ONE_BYTE_STRING (env->isolate (), " settingsArrayBuffer" ),
1161
1147
ArrayBuffer::New (env->isolate (),
1162
- env-> http2_settings_buffer () ,
1148
+ & http2_settings_buffer,
1163
1149
http2_settings_buffer_byte_length))
1164
1150
.FromJust ();
1165
1151
1166
- // Initialize the buffer used to store the options
1167
- env->set_http2_options_buffer (
1168
- new uint32_t [IDX_OPTIONS_FLAGS + 1 ]);
1169
-
1170
- const size_t http2_options_buffer_byte_length =
1171
- sizeof (*env->http2_options_buffer ()) *
1172
- (IDX_OPTIONS_FLAGS + 1 );
1173
-
1174
1152
target->Set (context,
1175
1153
FIXED_ONE_BYTE_STRING (env->isolate (), " optionsArrayBuffer" ),
1176
1154
ArrayBuffer::New (env->isolate (),
1177
- env-> http2_options_buffer () ,
1155
+ & http2_options_buffer,
1178
1156
http2_options_buffer_byte_length))
1179
1157
.FromJust ();
1180
1158
0 commit comments