@encharm/cws 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bindings/cws_linux_108.node +0 -0
- package/dist/bindings/cws_linux_64.node +0 -0
- package/dist/bindings/cws_linux_72.node +0 -0
- package/dist/bindings/cws_linux_79.node +0 -0
- package/dist/bindings/cws_linux_83.node +0 -0
- package/dist/bindings/cws_linux_93.node +0 -0
- package/dist/bindings/cws_win32_64.node +0 -0
- package/dist/bindings/cws_win32_72.node +0 -0
- package/dist/bindings/cws_win32_79.node +0 -0
- package/dist/bindings/cws_win32_83.node +0 -0
- package/dist/bindings/cws_win32_93.node +0 -0
- package/package.json +1 -1
- package/src/Addon.h +24 -2
- package/src/HTTPSocket.cpp +1 -1
- package/src/headers/{13 → 18}/aliased_buffer.h +61 -9
- package/src/headers/18/aliased_struct-inl.h +54 -0
- package/src/headers/18/aliased_struct.h +63 -0
- package/src/headers/{12 → 18}/async_wrap-inl.h +0 -0
- package/src/headers/{12 → 18}/async_wrap.h +26 -2
- package/src/headers/{12/base64.h → 18/base64-inl.h} +78 -86
- package/src/headers/18/base64.h +69 -0
- package/src/headers/{12 → 18}/base_object-inl.h +46 -25
- package/src/headers/{12 → 18}/base_object.h +82 -17
- package/src/headers/{12 → 18}/callback_queue-inl.h +9 -9
- package/src/headers/{12 → 18}/callback_queue.h +13 -5
- package/src/headers/18/cares_wrap.h +523 -0
- package/src/headers/{12 → 18}/connect_wrap.h +0 -0
- package/src/headers/{12 → 18}/connection_wrap.h +0 -0
- package/src/headers/18/crypto/crypto_aes.h +89 -0
- package/src/headers/{13/node_crypto_bio.h → 18/crypto/crypto_bio.h} +3 -4
- package/src/headers/18/crypto/crypto_cipher.h +291 -0
- package/src/headers/{13/node_crypto_clienthello-inl.h → 18/crypto/crypto_clienthello-inl.h} +4 -5
- package/src/headers/{13/node_crypto_clienthello.h → 18/crypto/crypto_clienthello.h} +3 -4
- package/src/headers/{12/node_crypto_common.h → 18/crypto/crypto_common.h} +49 -36
- package/src/headers/18/crypto/crypto_context.h +147 -0
- package/src/headers/18/crypto/crypto_dh.h +156 -0
- package/src/headers/18/crypto/crypto_dsa.h +77 -0
- package/src/headers/18/crypto/crypto_ec.h +170 -0
- package/src/headers/{12/node_crypto_groups.h → 18/crypto/crypto_groups.h} +3 -3
- package/src/headers/18/crypto/crypto_hash.h +89 -0
- package/src/headers/18/crypto/crypto_hkdf.h +65 -0
- package/src/headers/18/crypto/crypto_hmac.h +94 -0
- package/src/headers/18/crypto/crypto_keygen.h +305 -0
- package/src/headers/18/crypto/crypto_keys.h +420 -0
- package/src/headers/18/crypto/crypto_pbkdf2.h +76 -0
- package/src/headers/18/crypto/crypto_random.h +130 -0
- package/src/headers/18/crypto/crypto_rsa.h +141 -0
- package/src/headers/18/crypto/crypto_scrypt.h +87 -0
- package/src/headers/18/crypto/crypto_sig.h +168 -0
- package/src/headers/18/crypto/crypto_spkac.h +21 -0
- package/src/headers/18/crypto/crypto_timing.h +20 -0
- package/src/headers/{13/tls_wrap.h → 18/crypto/crypto_tls.h} +137 -66
- package/src/headers/18/crypto/crypto_util.h +791 -0
- package/src/headers/18/crypto/crypto_x509.h +143 -0
- package/src/headers/{12 → 18}/debug_utils-inl.h +0 -0
- package/src/headers/{13 → 18}/debug_utils.h +7 -4
- package/src/headers/{12 → 18}/diagnosticfilename-inl.h +0 -0
- package/src/headers/{12 → 18}/env-inl.h +397 -304
- package/src/headers/{12 → 18}/env.h +397 -172
- package/src/headers/{12 → 18}/handle_wrap.h +7 -3
- package/src/headers/18/histogram-inl.h +107 -0
- package/src/headers/18/histogram.h +239 -0
- package/src/headers/{13 → 18}/inspector_agent.h +4 -7
- package/src/headers/{12 → 18}/inspector_io.h +0 -0
- package/src/headers/{13 → 18}/inspector_profiler.h +17 -5
- package/src/headers/{12 → 18}/inspector_socket.h +0 -0
- package/src/headers/{12 → 18}/inspector_socket_server.h +0 -0
- package/src/headers/18/js_native_api.h +571 -0
- package/src/headers/{13 → 18}/js_native_api_types.h +30 -7
- package/src/headers/{12 → 18}/js_native_api_v8.h +220 -83
- package/src/headers/{12 → 18}/js_native_api_v8_internals.h +6 -5
- package/src/headers/{12 → 18}/js_stream.h +0 -0
- package/src/headers/{12 → 18}/json_utils.h +0 -0
- package/src/headers/{13 → 18}/memory_tracker-inl.h +6 -5
- package/src/headers/{13 → 18}/memory_tracker.h +0 -7
- package/src/headers/{13 → 18}/module_wrap.h +24 -7
- package/src/headers/{13 → 18}/node.h +329 -68
- package/src/headers/18/node_api.h +288 -0
- package/src/headers/18/node_api_internals.h +38 -0
- package/src/headers/{12 → 18}/node_api_types.h +12 -9
- package/src/headers/{12 → 18}/node_binding.h +0 -0
- package/src/headers/18/node_blob.h +191 -0
- package/src/headers/18/node_bob-inl.h +37 -0
- package/src/headers/18/node_bob.h +111 -0
- package/src/headers/{13 → 18}/node_buffer.h +0 -0
- package/src/headers/{13 → 18}/node_constants.h +5 -1
- package/src/headers/{12 → 18}/node_context_data.h +5 -0
- package/src/headers/{12 → 18}/node_contextify.h +37 -2
- package/src/headers/{10/node_win32_perfctr_provider.h → 18/node_crypto.h} +30 -31
- package/src/headers/{12 → 18}/node_dir.h +0 -0
- package/src/headers/{12 → 18}/node_dtrace.h +0 -0
- package/src/headers/{12 → 18}/node_errors.h +90 -24
- package/src/headers/18/node_external_reference.h +145 -0
- package/src/headers/{13 → 18}/node_file-inl.h +38 -21
- package/src/headers/{12 → 18}/node_file.h +74 -13
- package/src/headers/{13 → 18}/node_http2.h +365 -269
- package/src/headers/{12 → 18}/node_http2_state.h +40 -50
- package/src/headers/{13 → 18}/node_http_common-inl.h +25 -5
- package/src/headers/{13 → 18}/node_http_common.h +24 -20
- package/src/headers/{13 → 18}/node_i18n.h +2 -1
- package/src/headers/{12 → 18}/node_internals.h +39 -41
- package/src/headers/{13 → 18}/node_main_instance.h +15 -18
- package/src/headers/{12 → 18}/node_mem-inl.h +0 -0
- package/src/headers/{12 → 18}/node_mem.h +1 -1
- package/src/headers/{13 → 18}/node_messaging.h +170 -23
- package/src/headers/{12 → 18}/node_metadata.h +17 -4
- package/src/headers/{12 → 18}/node_mutex.h +77 -1
- package/src/headers/{12 → 18}/node_native_module.h +11 -1
- package/src/headers/{13 → 18}/node_native_module_env.h +14 -8
- package/src/headers/{12 → 18}/node_object_wrap.h +0 -0
- package/src/headers/{13 → 18}/node_options-inl.h +51 -21
- package/src/headers/{13 → 18}/node_options.h +46 -14
- package/src/headers/18/node_perf.h +168 -0
- package/src/headers/{12 → 18}/node_perf_common.h +16 -22
- package/src/headers/{12 → 18}/node_platform.h +21 -16
- package/src/headers/18/node_process-inl.h +26 -0
- package/src/headers/18/node_process.h +97 -0
- package/src/headers/{13 → 18}/node_report.h +2 -2
- package/src/headers/{13 → 18}/node_revert.h +10 -0
- package/src/headers/{12 → 18}/node_root_certs.h +439 -651
- package/src/headers/18/node_snapshot_builder.h +43 -0
- package/src/headers/18/node_snapshotable.h +130 -0
- package/src/headers/{12 → 18}/node_sockaddr-inl.h +100 -4
- package/src/headers/18/node_sockaddr.h +405 -0
- package/src/headers/{12 → 18}/node_stat_watcher.h +7 -1
- package/src/headers/{12 → 18}/node_union_bytes.h +0 -0
- package/src/headers/{13 → 18}/node_url.h +18 -1
- package/src/headers/18/node_v8.h +41 -0
- package/src/headers/{12 → 18}/node_v8_platform-inl.h +10 -0
- package/src/headers/{13 → 18}/node_version.h +7 -7
- package/src/headers/{12 → 18}/node_wasi.h +0 -0
- package/src/headers/18/node_wasm_web_api.h +55 -0
- package/src/headers/{13 → 18}/node_watchdog.h +0 -0
- package/src/headers/{10 → 18}/node_win32_etw_provider-inl.h +7 -6
- package/src/headers/{10 → 18}/node_win32_etw_provider.h +0 -0
- package/src/headers/{13 → 18}/node_worker.h +24 -17
- package/src/headers/{12 → 18}/pipe_wrap.h +2 -0
- package/src/headers/{12 → 18}/req_wrap-inl.h +0 -0
- package/src/headers/{12 → 18}/req_wrap.h +1 -1
- package/src/headers/{12 → 18}/spawn_sync.h +0 -0
- package/src/headers/{13 → 18}/stream_base-inl.h +58 -22
- package/src/headers/{13 → 18}/stream_base.h +29 -3
- package/src/headers/{13 → 18}/stream_pipe.h +8 -3
- package/src/headers/{12 → 18}/stream_wrap.h +4 -1
- package/src/headers/{13 → 18}/string_bytes.h +0 -7
- package/src/headers/{12 → 18}/string_decoder-inl.h +0 -0
- package/src/headers/{10 → 18}/string_decoder.h +0 -0
- package/src/headers/{13 → 18}/string_search.h +2 -2
- package/src/headers/{12 → 18}/tcp_wrap.h +4 -0
- package/src/headers/{12 → 18}/threadpoolwork-inl.h +0 -0
- package/src/headers/18/timer_wrap-inl.h +32 -0
- package/src/headers/18/timer_wrap.h +85 -0
- package/src/headers/{13 → 18}/tracing/agent.h +1 -1
- package/src/headers/{12 → 18}/tracing/node_trace_buffer.h +0 -0
- package/src/headers/{12 → 18}/tracing/node_trace_writer.h +0 -0
- package/src/headers/{13 → 18}/tracing/trace_event.h +23 -13
- package/src/headers/{12 → 18}/tracing/trace_event_common.h +0 -0
- package/src/headers/{12 → 18}/tracing/traced_value.h +0 -0
- package/src/headers/{13 → 18}/tty_wrap.h +2 -1
- package/src/headers/{13 → 18}/udp_wrap.h +5 -0
- package/src/headers/{13 → 18}/util-inl.h +69 -15
- package/src/headers/{13 → 18}/util.h +93 -31
- package/src/headers/18/v8-fast-api-calls.h +939 -0
- package/src/headers/{12 → 18}/v8abbr.h +2 -2
- package/src/headers/10/aliased_buffer.h +0 -241
- package/src/headers/10/async_wrap-inl.h +0 -106
- package/src/headers/10/async_wrap.h +0 -218
- package/src/headers/10/base64.h +0 -197
- package/src/headers/10/base_object-inl.h +0 -132
- package/src/headers/10/base_object.h +0 -115
- package/src/headers/10/connect_wrap.h +0 -28
- package/src/headers/10/connection_wrap.h +0 -30
- package/src/headers/10/debug_utils.h +0 -128
- package/src/headers/10/env-inl.h +0 -906
- package/src/headers/10/env.h +0 -1046
- package/src/headers/10/handle_wrap.h +0 -114
- package/src/headers/10/inspector_agent.h +0 -137
- package/src/headers/10/inspector_io.h +0 -97
- package/src/headers/10/inspector_socket.h +0 -59
- package/src/headers/10/inspector_socket_server.h +0 -104
- package/src/headers/10/js_stream.h +0 -57
- package/src/headers/10/memory_tracker-inl.h +0 -318
- package/src/headers/10/memory_tracker.h +0 -246
- package/src/headers/10/module_wrap.h +0 -100
- package/src/headers/10/node.h +0 -863
- package/src/headers/10/node_api.h +0 -752
- package/src/headers/10/node_api_types.h +0 -171
- package/src/headers/10/node_buffer.h +0 -90
- package/src/headers/10/node_code_cache.h +0 -17
- package/src/headers/10/node_constants.h +0 -74
- package/src/headers/10/node_context_data.h +0 -39
- package/src/headers/10/node_contextify.h +0 -141
- package/src/headers/10/node_counters.h +0 -59
- package/src/headers/10/node_crypto.h +0 -699
- package/src/headers/10/node_crypto_bio.h +0 -177
- package/src/headers/10/node_crypto_clienthello-inl.h +0 -92
- package/src/headers/10/node_crypto_clienthello.h +0 -131
- package/src/headers/10/node_crypto_groups.h +0 -416
- package/src/headers/10/node_dtrace.h +0 -84
- package/src/headers/10/node_errors.h +0 -118
- package/src/headers/10/node_file.h +0 -373
- package/src/headers/10/node_http2.h +0 -1304
- package/src/headers/10/node_http2_state.h +0 -158
- package/src/headers/10/node_i18n.h +0 -69
- package/src/headers/10/node_internals.h +0 -952
- package/src/headers/10/node_javascript.h +0 -41
- package/src/headers/10/node_messaging.h +0 -219
- package/src/headers/10/node_mutex.h +0 -191
- package/src/headers/10/node_object_wrap.h +0 -130
- package/src/headers/10/node_options-inl.h +0 -444
- package/src/headers/10/node_options.h +0 -397
- package/src/headers/10/node_perf.h +0 -134
- package/src/headers/10/node_perf_common.h +0 -96
- package/src/headers/10/node_persistent.h +0 -30
- package/src/headers/10/node_platform.h +0 -170
- package/src/headers/10/node_revert.h +0 -75
- package/src/headers/10/node_root_certs.h +0 -3393
- package/src/headers/10/node_stat_watcher.h +0 -65
- package/src/headers/10/node_url.h +0 -193
- package/src/headers/10/node_version.h +0 -120
- package/src/headers/10/node_watchdog.h +0 -114
- package/src/headers/10/node_worker.h +0 -94
- package/src/headers/10/pipe_wrap.h +0 -76
- package/src/headers/10/req_wrap-inl.h +0 -166
- package/src/headers/10/req_wrap.h +0 -61
- package/src/headers/10/sharedarraybuffer_metadata.h +0 -67
- package/src/headers/10/spawn_sync.h +0 -240
- package/src/headers/10/stream_base-inl.h +0 -458
- package/src/headers/10/stream_base.h +0 -378
- package/src/headers/10/stream_pipe.h +0 -72
- package/src/headers/10/stream_wrap.h +0 -130
- package/src/headers/10/string_bytes.h +0 -126
- package/src/headers/10/string_decoder-inl.h +0 -38
- package/src/headers/10/string_search.h +0 -620
- package/src/headers/10/tcp_wrap.h +0 -99
- package/src/headers/10/tls_wrap.h +0 -195
- package/src/headers/10/tracing/agent.h +0 -178
- package/src/headers/10/tracing/node_trace_buffer.h +0 -83
- package/src/headers/10/tracing/node_trace_writer.h +0 -75
- package/src/headers/10/tracing/trace_event.h +0 -706
- package/src/headers/10/tracing/trace_event_common.h +0 -1102
- package/src/headers/10/tracing/traced_value.h +0 -68
- package/src/headers/10/tty_wrap.h +0 -63
- package/src/headers/10/udp_wrap.h +0 -102
- package/src/headers/10/util-inl.h +0 -459
- package/src/headers/10/util.h +0 -508
- package/src/headers/10/v8abbr.h +0 -121
- package/src/headers/12/aliased_buffer.h +0 -263
- package/src/headers/12/debug_utils.h +0 -181
- package/src/headers/12/histogram-inl.h +0 -83
- package/src/headers/12/histogram.h +0 -98
- package/src/headers/12/http_parser_adaptor.h +0 -24
- package/src/headers/12/inspector_agent.h +0 -147
- package/src/headers/12/inspector_profiler.h +0 -137
- package/src/headers/12/js_native_api.h +0 -541
- package/src/headers/12/js_native_api_types.h +0 -139
- package/src/headers/12/memory_tracker-inl.h +0 -339
- package/src/headers/12/memory_tracker.h +0 -283
- package/src/headers/12/module_wrap.h +0 -99
- package/src/headers/12/node.h +0 -887
- package/src/headers/12/node_api.h +0 -239
- package/src/headers/12/node_buffer.h +0 -92
- package/src/headers/12/node_constants.h +0 -80
- package/src/headers/12/node_crypto.h +0 -800
- package/src/headers/12/node_crypto_bio.h +0 -195
- package/src/headers/12/node_crypto_clienthello-inl.h +0 -91
- package/src/headers/12/node_crypto_clienthello.h +0 -132
- package/src/headers/12/node_file-inl.h +0 -289
- package/src/headers/12/node_http2.h +0 -1311
- package/src/headers/12/node_http_parser_impl.h +0 -994
- package/src/headers/12/node_i18n.h +0 -144
- package/src/headers/12/node_main_instance.h +0 -97
- package/src/headers/12/node_messaging.h +0 -227
- package/src/headers/12/node_native_module_env.h +0 -65
- package/src/headers/12/node_options-inl.h +0 -447
- package/src/headers/12/node_options.h +0 -479
- package/src/headers/12/node_perf.h +0 -181
- package/src/headers/12/node_process.h +0 -41
- package/src/headers/12/node_report.h +0 -47
- package/src/headers/12/node_revert.h +0 -78
- package/src/headers/12/node_sockaddr.h +0 -123
- package/src/headers/12/node_url.h +0 -188
- package/src/headers/12/node_version.h +0 -98
- package/src/headers/12/node_watchdog.h +0 -152
- package/src/headers/12/node_win32_etw_provider-inl.h +0 -287
- package/src/headers/12/node_win32_etw_provider.h +0 -99
- package/src/headers/12/node_worker.h +0 -142
- package/src/headers/12/sharedarraybuffer_metadata.h +0 -72
- package/src/headers/12/stream_base-inl.h +0 -323
- package/src/headers/12/stream_base.h +0 -431
- package/src/headers/12/stream_pipe.h +0 -72
- package/src/headers/12/string_bytes.h +0 -142
- package/src/headers/12/string_decoder.h +0 -50
- package/src/headers/12/string_search.h +0 -638
- package/src/headers/12/tls_wrap.h +0 -221
- package/src/headers/12/tracing/agent.h +0 -195
- package/src/headers/12/tracing/trace_event.h +0 -710
- package/src/headers/12/tty_wrap.h +0 -64
- package/src/headers/12/udp_wrap.h +0 -222
- package/src/headers/12/util-inl.h +0 -529
- package/src/headers/12/util.h +0 -765
- package/src/headers/13/async_wrap-inl.h +0 -94
- package/src/headers/13/async_wrap.h +0 -224
- package/src/headers/13/base64.h +0 -197
- package/src/headers/13/base_object-inl.h +0 -353
- package/src/headers/13/base_object.h +0 -229
- package/src/headers/13/connect_wrap.h +0 -26
- package/src/headers/13/connection_wrap.h +0 -30
- package/src/headers/13/debug_utils-inl.h +0 -223
- package/src/headers/13/diagnosticfilename-inl.h +0 -33
- package/src/headers/13/env-inl.h +0 -1293
- package/src/headers/13/env.h +0 -1469
- package/src/headers/13/handle_wrap.h +0 -117
- package/src/headers/13/histogram-inl.h +0 -83
- package/src/headers/13/histogram.h +0 -98
- package/src/headers/13/inspector_io.h +0 -78
- package/src/headers/13/inspector_socket.h +0 -60
- package/src/headers/13/inspector_socket_server.h +0 -110
- package/src/headers/13/js_native_api.h +0 -541
- package/src/headers/13/js_native_api_v8.h +0 -303
- package/src/headers/13/js_native_api_v8_internals.h +0 -38
- package/src/headers/13/js_stream.h +0 -52
- package/src/headers/13/json_utils.h +0 -160
- package/src/headers/13/node_api.h +0 -239
- package/src/headers/13/node_api_types.h +0 -44
- package/src/headers/13/node_binding.h +0 -99
- package/src/headers/13/node_context_data.h +0 -39
- package/src/headers/13/node_contextify.h +0 -161
- package/src/headers/13/node_crypto.h +0 -800
- package/src/headers/13/node_crypto_common.h +0 -138
- package/src/headers/13/node_crypto_groups.h +0 -415
- package/src/headers/13/node_dir.h +0 -52
- package/src/headers/13/node_dtrace.h +0 -86
- package/src/headers/13/node_errors.h +0 -210
- package/src/headers/13/node_file.h +0 -364
- package/src/headers/13/node_http2_state.h +0 -144
- package/src/headers/13/node_internals.h +0 -405
- package/src/headers/13/node_mem-inl.h +0 -112
- package/src/headers/13/node_mem.h +0 -41
- package/src/headers/13/node_metadata.h +0 -109
- package/src/headers/13/node_mutex.h +0 -247
- package/src/headers/13/node_native_module.h +0 -99
- package/src/headers/13/node_object_wrap.h +0 -132
- package/src/headers/13/node_perf.h +0 -181
- package/src/headers/13/node_perf_common.h +0 -97
- package/src/headers/13/node_platform.h +0 -190
- package/src/headers/13/node_process.h +0 -41
- package/src/headers/13/node_root_certs.h +0 -3424
- package/src/headers/13/node_sockaddr-inl.h +0 -170
- package/src/headers/13/node_sockaddr.h +0 -123
- package/src/headers/13/node_stat_watcher.h +0 -66
- package/src/headers/13/node_union_bytes.h +0 -103
- package/src/headers/13/node_v8_platform-inl.h +0 -184
- package/src/headers/13/node_wasi.h +0 -108
- package/src/headers/13/node_win32_etw_provider-inl.h +0 -287
- package/src/headers/13/node_win32_etw_provider.h +0 -99
- package/src/headers/13/pipe_wrap.h +0 -78
- package/src/headers/13/req_wrap-inl.h +0 -170
- package/src/headers/13/req_wrap.h +0 -77
- package/src/headers/13/spawn_sync.h +0 -242
- package/src/headers/13/stream_wrap.h +0 -130
- package/src/headers/13/string_decoder-inl.h +0 -37
- package/src/headers/13/string_decoder.h +0 -50
- package/src/headers/13/tcp_wrap.h +0 -101
- package/src/headers/13/threadpoolwork-inl.h +0 -57
- package/src/headers/13/tracing/node_trace_buffer.h +0 -83
- package/src/headers/13/tracing/node_trace_writer.h +0 -75
- package/src/headers/13/tracing/trace_event_common.h +0 -1109
- package/src/headers/13/tracing/traced_value.h +0 -70
- package/src/headers/13/v8abbr.h +0 -124
|
@@ -3,11 +3,14 @@
|
|
|
3
3
|
|
|
4
4
|
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
5
|
|
|
6
|
+
#include <optional>
|
|
6
7
|
#include <unordered_map>
|
|
7
8
|
#include "node_messaging.h"
|
|
8
9
|
#include "uv.h"
|
|
9
10
|
|
|
10
11
|
namespace node {
|
|
12
|
+
|
|
13
|
+
struct SnapshotData;
|
|
11
14
|
namespace worker {
|
|
12
15
|
|
|
13
16
|
class WorkerThreadData;
|
|
@@ -16,6 +19,7 @@ enum ResourceLimits {
|
|
|
16
19
|
kMaxYoungGenerationSizeMb,
|
|
17
20
|
kMaxOldGenerationSizeMb,
|
|
18
21
|
kCodeRangeSizeMb,
|
|
22
|
+
kStackSizeMb,
|
|
19
23
|
kTotalResourceLimitCount
|
|
20
24
|
};
|
|
21
25
|
|
|
@@ -27,15 +31,19 @@ class Worker : public AsyncWrap {
|
|
|
27
31
|
const std::string& url,
|
|
28
32
|
std::shared_ptr<PerIsolateOptions> per_isolate_opts,
|
|
29
33
|
std::vector<std::string>&& exec_argv,
|
|
30
|
-
std::shared_ptr<KVStore> env_vars
|
|
34
|
+
std::shared_ptr<KVStore> env_vars,
|
|
35
|
+
const SnapshotData* snapshot_data);
|
|
31
36
|
~Worker() override;
|
|
32
37
|
|
|
33
38
|
// Run the worker. This is only called from the worker thread.
|
|
34
39
|
void Run();
|
|
35
40
|
|
|
36
41
|
// Forcibly exit the thread with a specified exit code. This may be called
|
|
37
|
-
// from any thread.
|
|
38
|
-
|
|
42
|
+
// from any thread. `error_code` and `error_message` can be used to create
|
|
43
|
+
// a custom `'error'` event before emitting `'exit'`.
|
|
44
|
+
void Exit(int code,
|
|
45
|
+
const char* error_code = nullptr,
|
|
46
|
+
const char* error_message = nullptr);
|
|
39
47
|
|
|
40
48
|
// Wait for the worker thread to stop (in a blocking manner).
|
|
41
49
|
void JoinThread();
|
|
@@ -43,11 +51,13 @@ class Worker : public AsyncWrap {
|
|
|
43
51
|
template <typename Fn>
|
|
44
52
|
inline bool RequestInterrupt(Fn&& cb);
|
|
45
53
|
|
|
46
|
-
|
|
54
|
+
SET_NO_MEMORY_INFO()
|
|
47
55
|
SET_MEMORY_INFO_NAME(Worker)
|
|
48
56
|
SET_SELF_SIZE(Worker)
|
|
57
|
+
bool IsNotIndicativeOfMemoryLeakAtExit() const override;
|
|
49
58
|
|
|
50
59
|
bool is_stopped() const;
|
|
60
|
+
const SnapshotData* snapshot_data() const { return snapshot_data_; }
|
|
51
61
|
|
|
52
62
|
static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
53
63
|
static void CloneParentEnvVars(
|
|
@@ -55,15 +65,18 @@ class Worker : public AsyncWrap {
|
|
|
55
65
|
static void SetEnvVars(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
56
66
|
static void StartThread(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
57
67
|
static void StopThread(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
68
|
+
static void HasRef(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
58
69
|
static void Ref(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
59
70
|
static void Unref(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
60
71
|
static void GetResourceLimits(
|
|
61
72
|
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
62
73
|
v8::Local<v8::Float64Array> GetResourceLimits(v8::Isolate* isolate) const;
|
|
63
74
|
static void TakeHeapSnapshot(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
75
|
+
static void LoopIdleTime(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
76
|
+
static void LoopStartTime(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
64
77
|
|
|
65
78
|
private:
|
|
66
|
-
|
|
79
|
+
bool CreateEnvMessagePort(Environment* env);
|
|
67
80
|
static size_t NearHeapLimit(void* data, size_t current_heap_limit,
|
|
68
81
|
size_t initial_heap_limit);
|
|
69
82
|
|
|
@@ -73,21 +86,17 @@ class Worker : public AsyncWrap {
|
|
|
73
86
|
|
|
74
87
|
MultiIsolatePlatform* platform_;
|
|
75
88
|
v8::Isolate* isolate_ = nullptr;
|
|
76
|
-
|
|
77
|
-
uv_thread_t tid_;
|
|
89
|
+
std::optional<uv_thread_t> tid_; // Set while the thread is running
|
|
78
90
|
|
|
79
|
-
|
|
80
|
-
std::unique_ptr<inspector::ParentInspectorHandle> inspector_parent_handle_;
|
|
81
|
-
#endif
|
|
91
|
+
std::unique_ptr<InspectorParentHandle> inspector_parent_handle_;
|
|
82
92
|
|
|
83
93
|
// This mutex protects access to all variables listed below it.
|
|
84
94
|
mutable Mutex mutex_;
|
|
85
95
|
|
|
86
|
-
bool thread_joined_ = true;
|
|
87
96
|
const char* custom_error_ = nullptr;
|
|
88
97
|
std::string custom_error_str_;
|
|
89
98
|
int exit_code_ = 0;
|
|
90
|
-
|
|
99
|
+
ThreadId thread_id_;
|
|
91
100
|
uintptr_t stack_base_ = 0;
|
|
92
101
|
|
|
93
102
|
// Custom resource constraints:
|
|
@@ -95,17 +104,13 @@ class Worker : public AsyncWrap {
|
|
|
95
104
|
void UpdateResourceConstraints(v8::ResourceConstraints* constraints);
|
|
96
105
|
|
|
97
106
|
// Full size of the thread's stack.
|
|
98
|
-
|
|
107
|
+
size_t stack_size_ = 4 * 1024 * 1024;
|
|
99
108
|
// Stack buffer size that is not available to the JS engine.
|
|
100
109
|
static constexpr size_t kStackBufferSize = 192 * 1024;
|
|
101
110
|
|
|
102
111
|
std::unique_ptr<MessagePortData> child_port_data_;
|
|
103
112
|
std::shared_ptr<KVStore> env_vars_;
|
|
104
113
|
|
|
105
|
-
// This is always kept alive because the JS object associated with the Worker
|
|
106
|
-
// instance refers to it via its [kPort] property.
|
|
107
|
-
MessagePort* parent_port_ = nullptr;
|
|
108
|
-
|
|
109
114
|
// A raw flag that is used by creator and worker threads to
|
|
110
115
|
// sync up on pre-mature termination of worker - while in the
|
|
111
116
|
// warmup phase. Once the worker is fully warmed up, use the
|
|
@@ -113,6 +118,7 @@ class Worker : public AsyncWrap {
|
|
|
113
118
|
bool stopped_ = true;
|
|
114
119
|
|
|
115
120
|
bool has_ref_ = true;
|
|
121
|
+
uint64_t environment_flags_ = EnvironmentFlags::kNoFlags;
|
|
116
122
|
|
|
117
123
|
// The real Environment of the worker object. It has a lesser
|
|
118
124
|
// lifespan than the worker object itself - comes to life
|
|
@@ -120,6 +126,7 @@ class Worker : public AsyncWrap {
|
|
|
120
126
|
// destroyed alongwith the worker thread.
|
|
121
127
|
Environment* env_ = nullptr;
|
|
122
128
|
|
|
129
|
+
const SnapshotData* snapshot_data_ = nullptr;
|
|
123
130
|
friend class WorkerThreadData;
|
|
124
131
|
};
|
|
125
132
|
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
|
|
30
30
|
namespace node {
|
|
31
31
|
|
|
32
|
+
class ExternalReferenceRegistry;
|
|
32
33
|
class Environment;
|
|
33
34
|
|
|
34
35
|
class PipeWrap : public ConnectionWrap<PipeWrap, uv_pipe_t> {
|
|
@@ -47,6 +48,7 @@ class PipeWrap : public ConnectionWrap<PipeWrap, uv_pipe_t> {
|
|
|
47
48
|
v8::Local<v8::Context> context,
|
|
48
49
|
void* priv);
|
|
49
50
|
|
|
51
|
+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
|
|
50
52
|
SET_NO_MEMORY_INFO()
|
|
51
53
|
SET_MEMORY_INFO_NAME(PipeWrap)
|
|
52
54
|
SET_SELF_SIZE(PipeWrap)
|
|
File without changes
|
|
@@ -66,7 +66,7 @@ class ReqWrap : public AsyncWrap, public ReqWrapBase {
|
|
|
66
66
|
// members in memory are predictable. sizeof(req_) depends on the type of T,
|
|
67
67
|
// so req_wrap_queue_ would no longer be at a fixed offset if it came after
|
|
68
68
|
// req_. For more information please refer to
|
|
69
|
-
// `doc/
|
|
69
|
+
// `doc/contributing/node-postmortem-support.md`
|
|
70
70
|
T req_;
|
|
71
71
|
};
|
|
72
72
|
|
|
File without changes
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
5
|
|
|
6
6
|
#include "async_wrap-inl.h"
|
|
7
|
+
#include "base_object-inl.h"
|
|
7
8
|
#include "node.h"
|
|
8
9
|
#include "stream_base.h"
|
|
9
10
|
#include "v8.h"
|
|
@@ -31,9 +32,10 @@ StreamReq* StreamReq::FromObject(v8::Local<v8::Object> req_wrap_obj) {
|
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
void StreamReq::Dispose() {
|
|
34
|
-
|
|
35
|
+
BaseObjectPtr<AsyncWrap> destroy_me{GetAsyncWrap()};
|
|
35
36
|
object()->SetAlignedPointerInInternalField(
|
|
36
37
|
StreamReq::kStreamReqField, nullptr);
|
|
38
|
+
destroy_me->Detach();
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
v8::Local<v8::Object> StreamReq::object() {
|
|
@@ -90,29 +92,29 @@ void StreamResource::RemoveStreamListener(StreamListener* listener) {
|
|
|
90
92
|
}
|
|
91
93
|
|
|
92
94
|
uv_buf_t StreamResource::EmitAlloc(size_t suggested_size) {
|
|
93
|
-
DebugSealHandleScope
|
|
95
|
+
DebugSealHandleScope seal_handle_scope;
|
|
94
96
|
return listener_->OnStreamAlloc(suggested_size);
|
|
95
97
|
}
|
|
96
98
|
|
|
97
99
|
void StreamResource::EmitRead(ssize_t nread, const uv_buf_t& buf) {
|
|
98
|
-
DebugSealHandleScope
|
|
100
|
+
DebugSealHandleScope seal_handle_scope;
|
|
99
101
|
if (nread > 0)
|
|
100
102
|
bytes_read_ += static_cast<uint64_t>(nread);
|
|
101
103
|
listener_->OnStreamRead(nread, buf);
|
|
102
104
|
}
|
|
103
105
|
|
|
104
106
|
void StreamResource::EmitAfterWrite(WriteWrap* w, int status) {
|
|
105
|
-
DebugSealHandleScope
|
|
107
|
+
DebugSealHandleScope seal_handle_scope;
|
|
106
108
|
listener_->OnStreamAfterWrite(w, status);
|
|
107
109
|
}
|
|
108
110
|
|
|
109
111
|
void StreamResource::EmitAfterShutdown(ShutdownWrap* w, int status) {
|
|
110
|
-
DebugSealHandleScope
|
|
112
|
+
DebugSealHandleScope seal_handle_scope;
|
|
111
113
|
listener_->OnStreamAfterShutdown(w, status);
|
|
112
114
|
}
|
|
113
115
|
|
|
114
116
|
void StreamResource::EmitWantsWrite(size_t suggested_size) {
|
|
115
|
-
DebugSealHandleScope
|
|
117
|
+
DebugSealHandleScope seal_handle_scope;
|
|
116
118
|
listener_->OnStreamWantsWrite(suggested_size);
|
|
117
119
|
}
|
|
118
120
|
|
|
@@ -134,8 +136,11 @@ int StreamBase::Shutdown(v8::Local<v8::Object> req_wrap_obj) {
|
|
|
134
136
|
StreamReq::ResetObject(req_wrap_obj);
|
|
135
137
|
}
|
|
136
138
|
|
|
139
|
+
BaseObjectPtr<AsyncWrap> req_wrap_ptr;
|
|
137
140
|
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(GetAsyncWrap());
|
|
138
141
|
ShutdownWrap* req_wrap = CreateShutdownWrap(req_wrap_obj);
|
|
142
|
+
if (req_wrap != nullptr)
|
|
143
|
+
req_wrap_ptr.reset(req_wrap->GetAsyncWrap());
|
|
139
144
|
int err = DoShutdown(req_wrap);
|
|
140
145
|
|
|
141
146
|
if (err != 0 && req_wrap != nullptr) {
|
|
@@ -144,9 +149,11 @@ int StreamBase::Shutdown(v8::Local<v8::Object> req_wrap_obj) {
|
|
|
144
149
|
|
|
145
150
|
const char* msg = Error();
|
|
146
151
|
if (msg != nullptr) {
|
|
147
|
-
req_wrap_obj->Set(
|
|
148
|
-
|
|
149
|
-
|
|
152
|
+
if (req_wrap_obj->Set(env->context(),
|
|
153
|
+
env->error_string(),
|
|
154
|
+
OneByteString(env->isolate(), msg)).IsNothing()) {
|
|
155
|
+
return UV_EBUSY;
|
|
156
|
+
}
|
|
150
157
|
ClearError();
|
|
151
158
|
}
|
|
152
159
|
|
|
@@ -169,7 +176,7 @@ StreamWriteResult StreamBase::Write(
|
|
|
169
176
|
if (send_handle == nullptr) {
|
|
170
177
|
err = DoTryWrite(&bufs, &count);
|
|
171
178
|
if (err != 0 || count == 0) {
|
|
172
|
-
return StreamWriteResult { false, err, nullptr, total_bytes };
|
|
179
|
+
return StreamWriteResult { false, err, nullptr, total_bytes, {} };
|
|
173
180
|
}
|
|
174
181
|
}
|
|
175
182
|
|
|
@@ -179,13 +186,14 @@ StreamWriteResult StreamBase::Write(
|
|
|
179
186
|
if (!env->write_wrap_template()
|
|
180
187
|
->NewInstance(env->context())
|
|
181
188
|
.ToLocal(&req_wrap_obj)) {
|
|
182
|
-
return StreamWriteResult { false, UV_EBUSY, nullptr, 0 };
|
|
189
|
+
return StreamWriteResult { false, UV_EBUSY, nullptr, 0, {} };
|
|
183
190
|
}
|
|
184
191
|
StreamReq::ResetObject(req_wrap_obj);
|
|
185
192
|
}
|
|
186
193
|
|
|
187
194
|
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(GetAsyncWrap());
|
|
188
195
|
WriteWrap* req_wrap = CreateWriteWrap(req_wrap_obj);
|
|
196
|
+
BaseObjectPtr<AsyncWrap> req_wrap_ptr(req_wrap->GetAsyncWrap());
|
|
189
197
|
|
|
190
198
|
err = DoWrite(req_wrap, bufs, count, send_handle);
|
|
191
199
|
bool async = err == 0;
|
|
@@ -197,13 +205,16 @@ StreamWriteResult StreamBase::Write(
|
|
|
197
205
|
|
|
198
206
|
const char* msg = Error();
|
|
199
207
|
if (msg != nullptr) {
|
|
200
|
-
req_wrap_obj->Set(env->context(),
|
|
201
|
-
|
|
202
|
-
|
|
208
|
+
if (req_wrap_obj->Set(env->context(),
|
|
209
|
+
env->error_string(),
|
|
210
|
+
OneByteString(env->isolate(), msg)).IsNothing()) {
|
|
211
|
+
return StreamWriteResult { false, UV_EBUSY, nullptr, 0, {} };
|
|
212
|
+
}
|
|
203
213
|
ClearError();
|
|
204
214
|
}
|
|
205
215
|
|
|
206
|
-
return StreamWriteResult {
|
|
216
|
+
return StreamWriteResult {
|
|
217
|
+
async, err, req_wrap, total_bytes, std::move(req_wrap_ptr) };
|
|
207
218
|
}
|
|
208
219
|
|
|
209
220
|
template <typename OtherBase>
|
|
@@ -240,19 +251,44 @@ StreamBase* StreamBase::FromObject(v8::Local<v8::Object> obj) {
|
|
|
240
251
|
StreamBase::kStreamBaseField));
|
|
241
252
|
}
|
|
242
253
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
254
|
+
WriteWrap* WriteWrap::FromObject(v8::Local<v8::Object> req_wrap_obj) {
|
|
255
|
+
return static_cast<WriteWrap*>(StreamReq::FromObject(req_wrap_obj));
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
template <typename T, bool kIsWeak>
|
|
259
|
+
WriteWrap* WriteWrap::FromObject(
|
|
260
|
+
const BaseObjectPtrImpl<T, kIsWeak>& base_obj) {
|
|
261
|
+
if (!base_obj) return nullptr;
|
|
262
|
+
return FromObject(base_obj->object());
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
ShutdownWrap* ShutdownWrap::FromObject(v8::Local<v8::Object> req_wrap_obj) {
|
|
266
|
+
return static_cast<ShutdownWrap*>(StreamReq::FromObject(req_wrap_obj));
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
template <typename T, bool kIsWeak>
|
|
270
|
+
ShutdownWrap* ShutdownWrap::FromObject(
|
|
271
|
+
const BaseObjectPtrImpl<T, kIsWeak>& base_obj) {
|
|
272
|
+
if (!base_obj) return nullptr;
|
|
273
|
+
return FromObject(base_obj->object());
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
void WriteWrap::SetBackingStore(std::unique_ptr<v8::BackingStore> bs) {
|
|
277
|
+
CHECK(!backing_store_);
|
|
278
|
+
backing_store_ = std::move(bs);
|
|
246
279
|
}
|
|
247
280
|
|
|
248
281
|
void StreamReq::Done(int status, const char* error_str) {
|
|
249
282
|
AsyncWrap* async_wrap = GetAsyncWrap();
|
|
250
283
|
Environment* env = async_wrap->env();
|
|
251
284
|
if (error_str != nullptr) {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
285
|
+
v8::HandleScope handle_scope(env->isolate());
|
|
286
|
+
if (async_wrap->object()->Set(
|
|
287
|
+
env->context(),
|
|
288
|
+
env->error_string(),
|
|
289
|
+
OneByteString(env->isolate(), error_str)).IsNothing()) {
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
256
292
|
}
|
|
257
293
|
|
|
258
294
|
OnDone(status);
|
|
@@ -18,12 +18,14 @@ class ShutdownWrap;
|
|
|
18
18
|
class WriteWrap;
|
|
19
19
|
class StreamBase;
|
|
20
20
|
class StreamResource;
|
|
21
|
+
class ExternalReferenceRegistry;
|
|
21
22
|
|
|
22
23
|
struct StreamWriteResult {
|
|
23
24
|
bool async;
|
|
24
25
|
int err;
|
|
25
26
|
WriteWrap* wrap;
|
|
26
27
|
size_t bytes;
|
|
28
|
+
BaseObjectPtr<AsyncWrap> wrap_obj;
|
|
27
29
|
};
|
|
28
30
|
|
|
29
31
|
using JSMethodFunction = void(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
@@ -47,6 +49,8 @@ class StreamReq {
|
|
|
47
49
|
virtual AsyncWrap* GetAsyncWrap() = 0;
|
|
48
50
|
inline v8::Local<v8::Object> object();
|
|
49
51
|
|
|
52
|
+
// TODO(RaisinTen): Update the return type to a Maybe, so that we can indicate
|
|
53
|
+
// if there is a pending exception/termination.
|
|
50
54
|
inline void Done(int status, const char* error_str = nullptr);
|
|
51
55
|
inline void Dispose();
|
|
52
56
|
|
|
@@ -76,23 +80,33 @@ class ShutdownWrap : public StreamReq {
|
|
|
76
80
|
StreamBase* stream,
|
|
77
81
|
v8::Local<v8::Object> req_wrap_obj);
|
|
78
82
|
|
|
83
|
+
static inline ShutdownWrap* FromObject(v8::Local<v8::Object> req_wrap_obj);
|
|
84
|
+
template <typename T, bool kIsWeak>
|
|
85
|
+
static inline ShutdownWrap* FromObject(
|
|
86
|
+
const BaseObjectPtrImpl<T, kIsWeak>& base_obj);
|
|
87
|
+
|
|
79
88
|
// Call stream()->EmitAfterShutdown() and dispose of this request wrap.
|
|
80
89
|
void OnDone(int status) override;
|
|
81
90
|
};
|
|
82
91
|
|
|
83
92
|
class WriteWrap : public StreamReq {
|
|
84
93
|
public:
|
|
85
|
-
inline void
|
|
94
|
+
inline void SetBackingStore(std::unique_ptr<v8::BackingStore> bs);
|
|
86
95
|
|
|
87
96
|
inline WriteWrap(
|
|
88
97
|
StreamBase* stream,
|
|
89
98
|
v8::Local<v8::Object> req_wrap_obj);
|
|
90
99
|
|
|
100
|
+
static inline WriteWrap* FromObject(v8::Local<v8::Object> req_wrap_obj);
|
|
101
|
+
template <typename T, bool kIsWeak>
|
|
102
|
+
static inline WriteWrap* FromObject(
|
|
103
|
+
const BaseObjectPtrImpl<T, kIsWeak>& base_obj);
|
|
104
|
+
|
|
91
105
|
// Call stream()->EmitAfterWrite() and dispose of this request wrap.
|
|
92
106
|
void OnDone(int status) override;
|
|
93
107
|
|
|
94
108
|
private:
|
|
95
|
-
|
|
109
|
+
std::unique_ptr<v8::BackingStore> backing_store_;
|
|
96
110
|
};
|
|
97
111
|
|
|
98
112
|
|
|
@@ -296,7 +310,7 @@ class StreamBase : public StreamResource {
|
|
|
296
310
|
|
|
297
311
|
static void AddMethods(Environment* env,
|
|
298
312
|
v8::Local<v8::FunctionTemplate> target);
|
|
299
|
-
|
|
313
|
+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
|
|
300
314
|
virtual bool IsAlive() = 0;
|
|
301
315
|
virtual bool IsClosing() = 0;
|
|
302
316
|
virtual bool IsIPCPipe();
|
|
@@ -314,6 +328,8 @@ class StreamBase : public StreamResource {
|
|
|
314
328
|
// subclasses are also `BaseObject`s.
|
|
315
329
|
Environment* stream_env() const { return env_; }
|
|
316
330
|
|
|
331
|
+
// TODO(RaisinTen): Update the return type to a Maybe, so that we can indicate
|
|
332
|
+
// if there is a pending exception/termination.
|
|
317
333
|
// Shut down the current stream. This request can use an existing
|
|
318
334
|
// ShutdownWrap object (that was created in JS), or a new one will be created.
|
|
319
335
|
// Returns 1 in case of a synchronous completion, 0 in case of asynchronous
|
|
@@ -321,6 +337,8 @@ class StreamBase : public StreamResource {
|
|
|
321
337
|
inline int Shutdown(
|
|
322
338
|
v8::Local<v8::Object> req_wrap_obj = v8::Local<v8::Object>());
|
|
323
339
|
|
|
340
|
+
// TODO(RaisinTen): Update the return type to a Maybe, so that we can indicate
|
|
341
|
+
// if there is a pending exception/termination.
|
|
324
342
|
// Write data to the current stream. This request can use an existing
|
|
325
343
|
// WriteWrap object (that was created in JS), or a new one will be created.
|
|
326
344
|
// This will first try to write synchronously using `DoTryWrite()`, then
|
|
@@ -411,6 +429,10 @@ class SimpleShutdownWrap : public ShutdownWrap, public OtherBase {
|
|
|
411
429
|
SET_NO_MEMORY_INFO()
|
|
412
430
|
SET_MEMORY_INFO_NAME(SimpleShutdownWrap)
|
|
413
431
|
SET_SELF_SIZE(SimpleShutdownWrap)
|
|
432
|
+
|
|
433
|
+
bool IsNotIndicativeOfMemoryLeakAtExit() const override {
|
|
434
|
+
return OtherBase::IsNotIndicativeOfMemoryLeakAtExit();
|
|
435
|
+
}
|
|
414
436
|
};
|
|
415
437
|
|
|
416
438
|
template <typename OtherBase>
|
|
@@ -424,6 +446,10 @@ class SimpleWriteWrap : public WriteWrap, public OtherBase {
|
|
|
424
446
|
SET_NO_MEMORY_INFO()
|
|
425
447
|
SET_MEMORY_INFO_NAME(SimpleWriteWrap)
|
|
426
448
|
SET_SELF_SIZE(SimpleWriteWrap)
|
|
449
|
+
|
|
450
|
+
bool IsNotIndicativeOfMemoryLeakAtExit() const override {
|
|
451
|
+
return OtherBase::IsNotIndicativeOfMemoryLeakAtExit();
|
|
452
|
+
}
|
|
427
453
|
};
|
|
428
454
|
|
|
429
455
|
} // namespace node
|
|
@@ -9,11 +9,14 @@ namespace node {
|
|
|
9
9
|
|
|
10
10
|
class StreamPipe : public AsyncWrap {
|
|
11
11
|
public:
|
|
12
|
-
StreamPipe(StreamBase* source, StreamBase* sink, v8::Local<v8::Object> obj);
|
|
13
12
|
~StreamPipe() override;
|
|
14
13
|
|
|
15
14
|
void Unpipe(bool is_in_deletion = false);
|
|
16
15
|
|
|
16
|
+
// TODO(RaisinTen): Just like MessagePort, add the following overload:
|
|
17
|
+
// static StreamPipe* New(StreamBase* source, StreamBase* sink,
|
|
18
|
+
// v8::Local<v8::Object> obj);
|
|
19
|
+
// so that we can indicate if there is a pending exception/termination.
|
|
17
20
|
static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
18
21
|
static void Start(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
19
22
|
static void Unpipe(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
@@ -25,6 +28,8 @@ class StreamPipe : public AsyncWrap {
|
|
|
25
28
|
SET_SELF_SIZE(StreamPipe)
|
|
26
29
|
|
|
27
30
|
private:
|
|
31
|
+
StreamPipe(StreamBase* source, StreamBase* sink, v8::Local<v8::Object> obj);
|
|
32
|
+
|
|
28
33
|
inline StreamBase* source();
|
|
29
34
|
inline StreamBase* sink();
|
|
30
35
|
|
|
@@ -42,7 +47,7 @@ class StreamPipe : public AsyncWrap {
|
|
|
42
47
|
// `OnStreamWantsWrite()` support.
|
|
43
48
|
size_t wanted_data_ = 0;
|
|
44
49
|
|
|
45
|
-
void ProcessData(size_t nread,
|
|
50
|
+
void ProcessData(size_t nread, std::unique_ptr<v8::BackingStore> bs);
|
|
46
51
|
|
|
47
52
|
class ReadableListener : public StreamListener {
|
|
48
53
|
public:
|
|
@@ -67,6 +72,6 @@ class StreamPipe : public AsyncWrap {
|
|
|
67
72
|
|
|
68
73
|
} // namespace node
|
|
69
74
|
|
|
70
|
-
#endif
|
|
75
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
71
76
|
|
|
72
77
|
#endif // SRC_STREAM_PIPE_H_
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
namespace node {
|
|
32
32
|
|
|
33
33
|
class Environment;
|
|
34
|
+
class ExternalReferenceRegistry;
|
|
34
35
|
|
|
35
36
|
class LibuvStreamWrap : public HandleWrap, public StreamBase {
|
|
36
37
|
public:
|
|
@@ -38,7 +39,7 @@ class LibuvStreamWrap : public HandleWrap, public StreamBase {
|
|
|
38
39
|
v8::Local<v8::Value> unused,
|
|
39
40
|
v8::Local<v8::Context> context,
|
|
40
41
|
void* priv);
|
|
41
|
-
|
|
42
|
+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
|
|
42
43
|
int GetFD() override;
|
|
43
44
|
bool IsAlive() override;
|
|
44
45
|
bool IsClosing() override;
|
|
@@ -104,6 +105,8 @@ class LibuvStreamWrap : public HandleWrap, public StreamBase {
|
|
|
104
105
|
|
|
105
106
|
// Callbacks for libuv
|
|
106
107
|
void OnUvAlloc(size_t suggested_size, uv_buf_t* buf);
|
|
108
|
+
// TODO(RaisinTen): Update the return type to a Maybe, so that we can indicate
|
|
109
|
+
// if there is a pending exception/termination.
|
|
107
110
|
void OnUvRead(ssize_t nread, const uv_buf_t* buf);
|
|
108
111
|
|
|
109
112
|
static void AfterUvWrite(uv_write_t* req, int status);
|
|
@@ -26,14 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
// Decodes a v8::Local<v8::String> or Buffer to a raw char*
|
|
28
28
|
|
|
29
|
-
#if (__GNUC__ >= 8) && !defined(__clang__)
|
|
30
|
-
#pragma GCC diagnostic push
|
|
31
|
-
#pragma GCC diagnostic ignored "-Wcast-function-type"
|
|
32
|
-
#endif
|
|
33
29
|
#include "v8.h"
|
|
34
|
-
#if (__GNUC__ >= 8) && !defined(__clang__)
|
|
35
|
-
#pragma GCC diagnostic pop
|
|
36
|
-
#endif
|
|
37
30
|
#include "env-inl.h"
|
|
38
31
|
|
|
39
32
|
#include <string>
|
|
File without changes
|
|
File without changes
|
|
@@ -32,7 +32,7 @@ class Vector {
|
|
|
32
32
|
|
|
33
33
|
// Returns true if the Vector is front-to-back, false if back-to-front.
|
|
34
34
|
// In the latter case, v[0] corresponds to the *end* of the memory range.
|
|
35
|
-
|
|
35
|
+
bool forward() const { return is_forward_; }
|
|
36
36
|
|
|
37
37
|
// Access individual vector elements - checks bounds in debug mode.
|
|
38
38
|
T& operator[](size_t index) const {
|
|
@@ -458,7 +458,7 @@ size_t StringSearch<Char>::BoyerMooreHorspoolSearch(
|
|
|
458
458
|
const size_t subject_length = subject.length();
|
|
459
459
|
const size_t pattern_length = pattern_.length();
|
|
460
460
|
int* char_occurrences = bad_char_shift_table_;
|
|
461
|
-
int64_t badness = -pattern_length;
|
|
461
|
+
int64_t badness = -static_cast<int64_t>(pattern_length);
|
|
462
462
|
|
|
463
463
|
// How bad we are doing without a good-suffix table.
|
|
464
464
|
Char last_char = pattern_[pattern_length - 1];
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
|
|
30
30
|
namespace node {
|
|
31
31
|
|
|
32
|
+
class ExternalReferenceRegistry;
|
|
32
33
|
class Environment;
|
|
33
34
|
|
|
34
35
|
class TCPWrap : public ConnectionWrap<TCPWrap, uv_tcp_t> {
|
|
@@ -45,6 +46,7 @@ class TCPWrap : public ConnectionWrap<TCPWrap, uv_tcp_t> {
|
|
|
45
46
|
v8::Local<v8::Value> unused,
|
|
46
47
|
v8::Local<v8::Context> context,
|
|
47
48
|
void* priv);
|
|
49
|
+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
|
|
48
50
|
|
|
49
51
|
SET_NO_MEMORY_INFO()
|
|
50
52
|
SET_SELF_SIZE(TCPWrap)
|
|
@@ -86,6 +88,8 @@ class TCPWrap : public ConnectionWrap<TCPWrap, uv_tcp_t> {
|
|
|
86
88
|
const v8::FunctionCallbackInfo<v8::Value>& args,
|
|
87
89
|
int family,
|
|
88
90
|
std::function<int(const char* ip_address, int port, T* addr)> uv_ip_addr);
|
|
91
|
+
static void Reset(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
92
|
+
int Reset(v8::Local<v8::Value> close_callback = v8::Local<v8::Value>());
|
|
89
93
|
|
|
90
94
|
#ifdef _WIN32
|
|
91
95
|
static void SetSimultaneousAccepts(
|
|
File without changes
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#ifndef SRC_TIMER_WRAP_INL_H_
|
|
2
|
+
#define SRC_TIMER_WRAP_INL_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "timer_wrap.h"
|
|
7
|
+
|
|
8
|
+
#include <utility>
|
|
9
|
+
|
|
10
|
+
#include "env.h"
|
|
11
|
+
#include "uv.h"
|
|
12
|
+
|
|
13
|
+
namespace node {
|
|
14
|
+
|
|
15
|
+
template <typename... Args>
|
|
16
|
+
inline TimerWrap::TimerWrap(Environment* env, Args&&... args)
|
|
17
|
+
: env_(env), fn_(std::forward<Args>(args)...) {
|
|
18
|
+
uv_timer_init(env->event_loop(), &timer_);
|
|
19
|
+
timer_.data = this;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
template <typename... Args>
|
|
23
|
+
inline TimerWrapHandle::TimerWrapHandle(Environment* env, Args&&... args) {
|
|
24
|
+
timer_ = new TimerWrap(env, std::forward<Args>(args)...);
|
|
25
|
+
env->AddCleanupHook(CleanupHook, this);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
} // namespace node
|
|
29
|
+
|
|
30
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
31
|
+
|
|
32
|
+
#endif // SRC_TIMER_WRAP_INL_H_
|