@@ -55,10 +55,27 @@ enum Http2OptionsIndex {
5555 IDX_OPTIONS_FLAGS
5656};
5757
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+
5875Http2Options::Http2Options (Environment* env) {
5976 nghttp2_option_new (&options_);
6077
61- uint32_t * buffer = env-> http2_options_buffer () ;
78+ uint32_t * buffer = http2_options_buffer;
6279 uint32_t flags = buffer[IDX_OPTIONS_FLAGS];
6380
6481 if (flags & (1 << IDX_OPTIONS_MAX_DEFLATE_DYNAMIC_TABLE_SIZE)) {
@@ -148,7 +165,7 @@ ssize_t Http2Session::OnCallbackPadding(size_t frameLen,
148165 Context::Scope context_scope (context);
149166
150167 if (object ()->Has (context, env ()->ongetpadding_string ()).FromJust ()) {
151- uint32_t * buffer = env ()-> http2_padding_buffer () ;
168+ uint32_t * buffer = http2_padding_buffer;
152169 buffer[0 ] = frameLen;
153170 buffer[1 ] = maxPayloadLen;
154171 MakeCallback (env ()->ongetpadding_string (), 0 , nullptr );
@@ -189,7 +206,7 @@ void PackSettings(const FunctionCallbackInfo<Value>& args) {
189206 std::vector<nghttp2_settings_entry> entries;
190207 entries.reserve (6 );
191208
192- uint32_t * const buffer = env-> http2_settings_buffer () ;
209+ uint32_t * buffer = http2_settings_buffer;
193210 uint32_t flags = buffer[IDX_SETTINGS_COUNT];
194211
195212 if (flags & (1 << IDX_SETTINGS_HEADER_TABLE_SIZE)) {
@@ -248,8 +265,7 @@ void PackSettings(const FunctionCallbackInfo<Value>& args) {
248265// Used to fill in the spec defined initial values for each setting.
249266void RefreshDefaultSettings (const FunctionCallbackInfo<Value>& args) {
250267 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;
253269 buffer[IDX_SETTINGS_HEADER_TABLE_SIZE] =
254270 DEFAULT_SETTINGS_HEADER_TABLE_SIZE;
255271 buffer[IDX_SETTINGS_ENABLE_PUSH] =
@@ -272,10 +288,9 @@ void RefreshSettings(const FunctionCallbackInfo<Value>& args) {
272288 CHECK (args[0 ]->IsObject ());
273289 Http2Session* session;
274290 ASSIGN_OR_RETURN_UNWRAP (&session, args[0 ].As <Object>());
275- Environment* env = session->env ();
276291 nghttp2_session* s = session->session ();
277292
278- uint32_t * const buffer = env-> http2_settings_buffer () ;
293+ uint32_t * buffer = http2_settings_buffer;
279294 buffer[IDX_SETTINGS_HEADER_TABLE_SIZE] =
280295 fn (s, NGHTTP2_SETTINGS_HEADER_TABLE_SIZE);
281296 buffer[IDX_SETTINGS_MAX_CONCURRENT_STREAMS] =
@@ -295,8 +310,7 @@ void RefreshSessionState(const FunctionCallbackInfo<Value>& args) {
295310 DEBUG_HTTP2 (" Http2Session: refreshing session state\n " );
296311 CHECK_EQ (args.Length (), 1 );
297312 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;
300314 Http2Session* session;
301315 ASSIGN_OR_RETURN_UNWRAP (&session, args[0 ].As <Object>());
302316 nghttp2_session* s = session->session ();
@@ -333,7 +347,7 @@ void RefreshStreamState(const FunctionCallbackInfo<Value>& args) {
333347 nghttp2_session* s = session->session ();
334348 Nghttp2Stream* stream;
335349
336- double * const buffer = env-> http2_stream_state_buffer () ;
350+ double * buffer = http2_stream_state_buffer;
337351
338352 if ((stream = session->FindStream (id)) == nullptr ) {
339353 buffer[IDX_STREAM_STATE] = NGHTTP2_STREAM_STATE_IDLE;
@@ -438,9 +452,7 @@ void Http2Session::SubmitSettings(const FunctionCallbackInfo<Value>& args) {
438452 Http2Session* session;
439453 ASSIGN_OR_RETURN_UNWRAP (&session, args.Holder ());
440454
441- Environment* env = session->env ();
442-
443- uint32_t * const buffer = env->http2_settings_buffer ();
455+ uint32_t * buffer = http2_settings_buffer;
444456 uint32_t flags = buffer[IDX_SETTINGS_COUNT];
445457
446458 std::vector<nghttp2_settings_entry> entries;
@@ -1107,74 +1119,40 @@ void Initialize(Local<Object> target,
11071119 HandleScope scope (isolate);
11081120
11091121 // 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-
11141122 target->Set (context,
11151123 FIXED_ONE_BYTE_STRING (env->isolate (), " paddingArrayBuffer" ),
11161124 ArrayBuffer::New (env->isolate (),
1117- env-> http2_padding_buffer () ,
1125+ & http2_padding_buffer,
11181126 http2_padding_buffer_byte_length))
11191127 .FromJust ();
11201128
11211129 // 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-
11291130 target->Set (context,
11301131 FIXED_ONE_BYTE_STRING (env->isolate (), " sessionStateArrayBuffer" ),
11311132 ArrayBuffer::New (env->isolate (),
1132- env-> http2_session_state_buffer () ,
1133+ & http2_session_state_buffer,
11331134 http2_session_state_buffer_byte_length))
11341135 .FromJust ();
11351136
11361137 // 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-
11441138 target->Set (context,
11451139 FIXED_ONE_BYTE_STRING (env->isolate (), " streamStateArrayBuffer" ),
11461140 ArrayBuffer::New (env->isolate (),
1147- env-> http2_stream_state_buffer () ,
1141+ & http2_stream_state_buffer,
11481142 http2_stream_state_buffer_byte_length))
11491143 .FromJust ();
11501144
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-
11591145 target->Set (context,
11601146 FIXED_ONE_BYTE_STRING (env->isolate (), " settingsArrayBuffer" ),
11611147 ArrayBuffer::New (env->isolate (),
1162- env-> http2_settings_buffer () ,
1148+ & http2_settings_buffer,
11631149 http2_settings_buffer_byte_length))
11641150 .FromJust ();
11651151
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-
11741152 target->Set (context,
11751153 FIXED_ONE_BYTE_STRING (env->isolate (), " optionsArrayBuffer" ),
11761154 ArrayBuffer::New (env->isolate (),
1177- env-> http2_options_buffer () ,
1155+ & http2_options_buffer,
11781156 http2_options_buffer_byte_length))
11791157 .FromJust ();
11801158
0 commit comments