[fpc-pascal] Call function in shared library from multiple threads
Michael Van Canneyt
michael at freepascal.org
Fri Mar 31 15:04:31 CEST 2017
On Thu, 30 Mar 2017, Michael Van Canneyt wrote:
>
>
> On Thu, 30 Mar 2017, Krzysztof wrote:
>
>> 2017-03-30 15:19 GMT+02:00 Michael Van Canneyt <michael at freepascal.org>
>>>
>>>
>>> Nevertheless, that should work.
>>>
>>> I've used it in multi-threaded apache modules.
>>>
>>
>> Well it doesn't work or fpjson module is not thread safe in this case. You
>> can test it by yourself with attached demo (first post). Try it few times
>> because sometimes if you are lucky then there is no error
>
> If I find a moment, I will test.
I can reproduce the problem.
At least partially it is related to the threads mechanism not being initialized
correctly.
To fix that, you can do the following.
In the library startup code, create a dummy thread.
This will initialize the threads mechanism:
library testlib;
{$mode objfpc}{$H+}
uses
cthreads, cmem, Classes, testlibu;
exports
InitTest, FinalizeTest, Test;
begin
with TThread.Create(False) do
end.
After this, I no longer get the problem (which doesn't mean there are no
other possible problems :) )
Michael.
More information about the fpc-pascal
mailing list