Skip to content

Commit

Permalink
fix: crash on WebWorker destruction
Browse files Browse the repository at this point in the history
  • Loading branch information
codebytere committed Aug 24, 2022
1 parent 900ffed commit 0868b4c
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 6 deletions.
Expand Up @@ -136,7 +136,7 @@ index 7cd3a2a954ff7d70e6ba7a6f7538648841bc54b2..f89b7158218be60ac10e61484a2d5e5e


diff --git a/deps/uv/src/unix/loop.c b/deps/uv/src/unix/loop.c
index a88e71c339351f2ebcdd6c3f933fc3b1122910ed..353143e5ebecae598425dc036f4458bb7c43bb0b 100644
index a88e71c339351f2ebcdd6c3f933fc3b1122910ed..46fc03264b6cc1a3a4d8faf5ec5a754fc07c9b6d 100644
--- a/deps/uv/src/unix/loop.c
+++ b/deps/uv/src/unix/loop.c
@@ -217,6 +217,11 @@ int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) {
Expand All @@ -151,7 +151,7 @@ index a88e71c339351f2ebcdd6c3f933fc3b1122910ed..353143e5ebecae598425dc036f4458bb
if (option != UV_LOOP_BLOCK_SIGNAL)
return UV_ENOSYS;

@@ -226,3 +231,37 @@ int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) {
@@ -226,3 +231,40 @@ int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) {
loop->flags |= UV_LOOP_BLOCK_SIGPROF;
return 0;
}
Expand Down Expand Up @@ -183,6 +183,9 @@ index a88e71c339351f2ebcdd6c3f933fc3b1122910ed..353143e5ebecae598425dc036f4458bb
+ if (r == len)
+ return;
+
+ if (!uv_loop_alive(loop))
+ return;
+
+ if (r == -1)
+ if (errno == EAGAIN || errno == EWOULDBLOCK)
+ return;
Expand Down
11 changes: 7 additions & 4 deletions shell/common/node_bindings.cc
Expand Up @@ -37,6 +37,7 @@
#include "shell/common/mac/main_application_bundle.h"
#include "shell/common/node_includes.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_initializer.h" // nogncheck
#include "third_party/electron_node/src/debug_utils.h"

#if !defined(MAS_BUILD)
#include "shell/common/crash_keys.h"
Expand Down Expand Up @@ -131,12 +132,14 @@ void stop_and_close_uv_loop(uv_loop_t* loop) {

// All remaining handles are in a closing state now.
// Pump the event loop so that they can finish closing.
for (;;)
if (uv_run(loop, UV_RUN_DEFAULT) == 0)
break;
bool more;
do {
uv_run(loop, UV_RUN_DEFAULT);
more = uv_loop_alive(loop);
} while (more);

DCHECK_EQ(0, uv_loop_alive(loop));
uv_loop_close(loop);
node::CheckedUvLoopClose(loop);
}

bool g_is_initialized = false;
Expand Down

0 comments on commit 0868b4c

Please sign in to comment.