mirror of https://github.com/oxen-io/lokinet
patch unbound to fix windows shutdown crash
This commit is contained in:
parent
40348b24e1
commit
3bc3ae9d84
|
@ -306,8 +306,15 @@ build_external(expat
|
|||
)
|
||||
add_static_target(expat expat_external libexpat.a)
|
||||
|
||||
|
||||
if(WIN32)
|
||||
set(unbound_patch
|
||||
PATCH_COMMAND ${PROJECT_SOURCE_DIR}/contrib/apply-patches.sh
|
||||
${PROJECT_SOURCE_DIR}/contrib/patches/unbound-delete-crash-fix.patch)
|
||||
endif()
|
||||
build_external(unbound
|
||||
DEPENDS openssl_external expat_external
|
||||
${unbound_patch}
|
||||
CONFIGURE_COMMAND ./configure ${cross_host} ${cross_rc} --prefix=${DEPS_DESTDIR} --disable-shared
|
||||
--enable-static --with-libunbound-only --with-pic
|
||||
--$<IF:$<BOOL:${WITH_LTO}>,enable,disable>-flto --with-ssl=${DEPS_DESTDIR}
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
commit 56d816014d5e8a7eb055169c7e13a303dad5e50f
|
||||
Author: Jason Rhinelander <jason@imaginary.ca>
|
||||
Date: Mon Oct 31 22:07:03 2022 -0300
|
||||
|
||||
Set tube->ev_listen to NULL to prevent double unregister
|
||||
|
||||
On windows when using threaded mode (i.e. `ub_ctx_async(ctx, 1)`)
|
||||
tube_remove_bg_listen gets called twice: once when the thread does its
|
||||
own cleanup, then again in `tube_delete()`. Because `ev_listen` doesn't
|
||||
get cleared, however, we end we calling ub_winsock_unregister_wsaevent
|
||||
with a freed pointer.
|
||||
|
||||
This doesn't always manifest because, apparently, for various compilers
|
||||
and settings that memory *might* be overwritten in which case the
|
||||
additional check for ev->magic will prevent anything actually happening,
|
||||
but in my case under mingw32 that doesn't happen and we end up
|
||||
eventually crashing.
|
||||
|
||||
This fixes the crash by properly NULLing the pointer so that the second
|
||||
ub_winsock_unregister_wsaevent(...) becomes a no-op.
|
||||
|
||||
diff --git a/util/tube.c b/util/tube.c
|
||||
index 43455fee..a92dfa77 100644
|
||||
--- a/util/tube.c
|
||||
+++ b/util/tube.c
|
||||
@@ -570,6 +570,7 @@ void tube_remove_bg_listen(struct tube* tube)
|
||||
{
|
||||
verbose(VERB_ALGO, "tube remove_bg_listen");
|
||||
ub_winsock_unregister_wsaevent(tube->ev_listen);
|
||||
+ tube->ev_listen = NULL;
|
||||
}
|
||||
|
||||
void tube_remove_bg_write(struct tube* tube)
|
Loading…
Reference in New Issue