Commit 1b1f0d8
committed
Cygwin: dll_init: Always call __cxa_finalize() for DLL_LOAD
For dlopen()'ed DLL, __cxa_finalize() should always be called at dll
detach time. The reason is as follows. In the case that dlopen()'ed
DLL A is dlclose()'ed in the destructor of DLL B, and the destructor
of DLL B is called in exit_state, DLL A will be unloaded by dlclose().
If __cxa_finalize() for DLL A is not called here, the destructor of
DLL A will be called in exit() even though DLL A is already unloaded.
This causes crash at exit(). In this case, __cxa_finalize() should be
called before unloading DLL A even in exit_state.
Addresses: https://cygwin.com/pipermail/cygwin/2025-October/258877.html
Fixes: c019a66 ("* dll_init.cc (dll_list::detach) ... Don't call __cxa_finalize in exiting case.")
Reported-by: Thomas Huth <th.huth@posteo.eu>
Reviewed-by: Mark Geisert <mark@maxrnd.com>, Jon Turney <jon.turney@dronecode.org.uk>, Corinna Vinschen <corinna-cygwin@cygwin.com>
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
(cherry picked from commit 0d2f981)1 parent eae30ac commit 1b1f0d8
1 file changed
Lines changed: 10 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
584 | 584 | | |
585 | 585 | | |
586 | 586 | | |
587 | | - | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
588 | 597 | | |
589 | 598 | | |
590 | 599 | | |
| |||
0 commit comments