Skip to content

SIGSEGV on exit on cygwin #17262

Closed
Closed
@Berrysoft

Description

@Berrysoft

I did this

It's hard to get a MWE. I'll discribe what I've done:

  • I'm the maintainer of cygwin target of rust, and recently I've managed to compile cargo targeting MSYS2 (a variant of cygwin), linking libcurl 8.13.0 and openssl 3.5.0 (dynamically).
  • cargo fail silently with SIGSEGV on an anoymous thread exits. Backtrace:
#0  0x0000000000000000 in ?? ()
#1  0x00000001800b2827 in pthread_testcancel () at /d/S/B/src/msys2-runtime/winsup/cygwin/thread.cc:399
#2  pthread_rwlock_wrlock (rwlock=0xa000b73b0) at /d/S/B/src/msys2-runtime/winsup/cygwin/thread.cc:4352
#3  0x000000018019ce44 in _sigfe () at sigfe.s:35
#4  0x0000000435849299 in CRYPTO_THREAD_write_lock () from /usr/bin/msys-crypto-3.dll
#5  0x0000000435835702 in init_thread_remove_handlers () from /usr/bin/msys-crypto-3.dll
#6  0x0000000435835b43 in OPENSSL_thread_stop () from /usr/bin/msys-crypto-3.dll
#7  0x00000005d24bbfdd in DllMain (hinstDLL=<optimized out>, fdwReason=<optimized out>, lpvReserved=<optimized out>) at dllmain.c:74
#8  0x00007ff869351e53 in ntdll!RtlDeactivateActivationContext () from /c/WINDOWS/SYSTEM32/ntdll.dll
#9  0x00007ff8692f2294 in ntdll!LdrShutdownThread () from /c/WINDOWS/SYSTEM32/ntdll.dll
#10 0x00007ff8692f1da6 in ntdll!RtlExitUserThread () from /c/WINDOWS/SYSTEM32/ntdll.dll
#11 0x00000001800c4eb0 in exit_thread (res=res@entry=0) at /d/S/B/src/msys2-runtime/winsup/cygwin/sigproc.cc:587
#12 0x00000001800ab540 in pthread::exit (this=0xa001e6b60, value_ptr=0x0) at /d/S/B/src/msys2-runtime/winsup/cygwin/thread.cc:584
#13 0x00000001800ab333 in pthread::thread_init_wrapper (arg=0xa001e6b60) at /d/S/B/src/msys2-runtime/winsup/cygwin/thread.cc:2016
#14 0x0000000180044841 in pthread_wrapper (arg=<optimized out>) at /d/S/B/src/msys2-runtime/winsup/cygwin/create_posix_thread.cc:79
#15 pthread_wrapper (arg=<optimized out>) at /d/S/B/src/msys2-runtime/winsup/cygwin/create_posix_thread.cc:39
  • It turns out that a thread exits and libcurl is detached. It calls OPENSSL_thread_stop and crashes.
  • So I looked into the source code and the comment says that it is for statically linked openssl, so I removed this call and compiled again. Now cargo works fine.

I expected the following

Well, as it's very hard to construct a MWE, I'm asking experts for help. Could someone explain that whether it is necessary to call OPENSSL_thread_stop if openssl is dynamically linked?

Or, could someone help me to get the clue that, why libcurl is detached when cargo is running?

curl/libcurl version

curl 8.13.0

operating system

MSYS2

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions