Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix crash due to order of initialization for threading on Windows with shared libxml2 2.11.4 #370

Merged
merged 1 commit into from
May 25, 2023

Conversation

schlenk
Copy link
Contributor

@schlenk schlenk commented May 24, 2023

This fixes an Access Violation on Windows when using a shared build of libxml2 2.11.4.

Stacktrace:

ntdll.dll!RtlpWaitOnCriticalSection()  + 0xa6 Bytes	
ntdll.dll!RtlpEnterCriticalSectionContended()  + 0x1c4 Bytes	
ntdll.dll!RtlEnterCriticalSection()  + 0x42 Bytes	
libxml2.dll!xmlRMutexLock(_xmlRMutex * tok=0x0000000002fea170)  Zeile 234	C
libxml2.dll!xmlThrDefIndentTreeOutput(int v=0)  Zeile 934	C
etree.pyd!00000000037fc566() 	
python27.dll!_PyImport_LoadDynamicModule(char * name=0x0000000002fe4408, char * pathname=0x000000005a49c660, _iobuf * fp=0x0000000002839880)  Zeile 54	C

libxml2 changed the mutex initialization in this commit: https://gitlab.gnome.org/GNOME/libxml2/-/commit/65d381f32c0d2cb2361055fddbd5c4a9119031d1

xmlThrDefIndentTreeOutput tries to use the global Mutex, but this is only initialized by xmlInitParser(), so it crashes due to wrong initialization order.

This fixes an Access Violation on Windows when using a shared build of libxml2 2.11.4.

Stacktrace:

 	ntdll.dll!RtlpWaitOnCriticalSection()  + 0xa6 Bytes	
 	ntdll.dll!RtlpEnterCriticalSectionContended()  + 0x1c4 Bytes	
 	ntdll.dll!RtlEnterCriticalSection()  + 0x42 Bytes	
>	libxml2.dll!xmlRMutexLock(_xmlRMutex * tok=0x0000000002fea170)  Zeile 234	C
 	libxml2.dll!xmlThrDefIndentTreeOutput(int v=0)  Zeile 934	C
 	etree.pyd!00000000037fc566() 	
 	python27.dll!_PyImport_LoadDynamicModule(char * name=0x0000000002fe4408, char * pathname=0x000000005a49c660, _iobuf * fp=0x0000000002839880)  Zeile 54	C

libxml2 changed the mutex initialization in this commit:
https://gitlab.gnome.org/GNOME/libxml2/-/commit/65d381f32c0d2cb2361055fddbd5c4a9119031d1

xmlThrDefIndentTreeOutput tries to use the global Mutex, but this is only initialized by xmlInitParser(), so it crashes due to wrong initialization order.
@schlenk schlenk changed the title Fix order of initialization for threading on Windows with shared libxml2 2.11.4 Fix crash due to order of initialization for threading on Windows with shared libxml2 2.11.4 May 24, 2023
@scoder
Copy link
Member

scoder commented May 24, 2023

Looks reasonable, thanks. I'll see what CI says and then merge it.

@scoder scoder merged commit 53eb0f8 into lxml:master May 25, 2023
44 of 46 checks passed
@scoder
Copy link
Member

scoder commented May 25, 2023

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants