X Tutup
Skip to content
/ lxml Public

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

Merged
scoder merged 1 commit intolxml:masterfrom
schlenk:master
May 25, 2023
Merged

Fix crash due to order of initialization for threading on Windows with shared libxml2 2.11.4#370
scoder merged 1 commit intolxml:masterfrom
schlenk:master

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
@scoder
Copy link
Member

scoder commented May 25, 2023

Thanks

lazka added a commit to msys2/MINGW-packages that referenced this pull request Jun 23, 2023
OscarL added a commit to OscarL/haikuports that referenced this pull request Aug 22, 2024
Fix crash on "import lxml.etree" related to calling xmlInitParser() too late.
See: lxml/lxml#370
Begasus pushed a commit to haikuports/haikuports that referenced this pull request Aug 23, 2024
Fix crash on "import lxml.etree" related to calling xmlInitParser() too late.
See: lxml/lxml#370
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

X Tutup