Uh, indeed! Thanks for the fixes

Best Regards,
Luca

________________________________
Da: LIU Hao <[email protected]>
Inviato: giovedì, dicembre 25, 2025 1:44:04 PM
A: Luca Bacci <[email protected]>; [email protected] 
<[email protected]>
Oggetto: Re: R: R: [Mingw-w64-public] Implement safe stdio flush on exit

在 2025-12-25 00:24, Luca Bacci 写道:
> diff --git a/mingw-w64-crt/testcases/Makefile.am 
> b/mingw-w64-crt/testcases/Makefile.am
> index 14c59abc..f0d51f3b 100644
> --- a/mingw-w64-crt/testcases/Makefile.am
> +++ b/mingw-w64-crt/testcases/Makefile.am
> @@ -84,6 +85,12 @@ EXTRA_DIST = \
> t_stprintf_tmpl.h \
> t_swprintf_tmpl.h
>
> +libprocdetach.dll: libprocdetach.o
> + $(LINK) -shared libprocdetach.o -Wl,--out-implib,[email protected]
> +
> +EXTRA_t_safe_flush_DEPENDENCIES = libprocdetach.dll
> +t_safe_flush_LDADD = -L. -lprocdetach.dll
> +

I think I saw somewhere that `-L.` belong in `_LDFLAGS`. But for this use you 
don't have to use `-L`; .a
libraries can be passed to the linker directly:

libprocdetach.dll.a: libprocdetach.o
$(LINK) -shared libprocdetach.o -Wl,--out-implib,$@ -o libprocdetach.dll

t_safe_flush_LDADD = libprocdetach.dll.a


> diff --git a/mingw-w64-crt/testcases/t_safe_flush.c 
> b/mingw-w64-crt/testcases/t_safe_flush.c
> new file mode 100644
> index 00000000..dae4c934
> --- /dev/null
> +++ b/mingw-w64-crt/testcases/t_safe_flush.c
> @@ -0,0 +1,146 @@
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <string.h>
> +#include <assert.h>
> +#include <process.h>
> +#include <io.h>
> +#include <fcntl.h>
> +#include <windows.h>
> +#include <versionhelpers.h>
> +
> +#define STRING "hello world!"
> +
> +/* child process */
> +
> +CRITICAL_SECTION cs;
> +
> +static unsigned int thread_main(void *user_data) {

This needs to be `__stdcall`, otherwise...

> + assert(_beginthreadex(NULL, 0, thread_main, handle_event, 0, NULL) != 0);

won't compile on x86-32.


> + /* The C RunTime library flushes streams from its DllMain
> + * handler on DLL_PROCESS_DETACH. However that DllMain
> + * won't run becuase another DLL triggers instant termination.

^~~~~~~ because

I'm now fixing these locally and passing it through the CI.



--
Best regards,
LIU Hao


_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to