[fpc-devel] InitHeap in TLS_Callback [[Re: threads vs widestringmanager / crash]]

Martin fpc at mfriebe.de
Tue Dec 20 15:11:20 CET 2022


On 20/12/2022 15:08, Martin wrote:
> Ok, I don't know too much about the whole initialization....
> But on the off chance of triggering some ideas, I throw in a couple of 
> my thoughts....
>
> On 19/12/2022 07:42, Sven Barth wrote:
>>
>> This is likely to be the cause, cause the EXEC_TLS_CALLBACK is 
>> executed by Windows for every thread that is started for an 
>> application. And if the debugger triggers the start of a thread...
>
> Maybe, maybe not always? But, yes at least in the case that I 
> documented in 2018: 
> https://lists.freepascal.org/pipermail/fpc-devel/2018-July/039374.html

While I just looked through that code, I came to think there may be yet 
another issue.

If a thread is started, that can call EXEC_TLS_CALLBACK.
And EXEC_TLS_CALLBACK  can call InitHeap (in DLL_PROCESS_ATTACH) before 
the main thread has run InitHeap.

But InitHeap does not seem to be threadsafe.

InitHeap itself does probably work if it runs overlapping. But, if one 
thread already goes into using the heap (e.g. allocating) while the 
other still is in InitHeap... That likely does not go well.



More information about the fpc-devel mailing list