<div dir="ltr">Hi,<div><br></div><div>I'm wondering if shared libraries (on Linux) support call exported function from multiple threads. I made small demo. Threads send JSON PChar into shared lib function which parse it and log in syslog. No global vars, everything locally in function. But even that I'm getting random errors like:</div><div><br></div><div><div>29.03.2017 16:33    kernel    [26260.212884] traps: test_libmjrende[12177] general protection ip:7fe823eed2f1 sp:7fe8238571e0 error:0 in libmjrender.so[7fe823de0000+284000]</div><div>29.03.2017 16:36    kernel    [26443.509924] test_libmjrende[12247]: segfault at 7f5e02d179f0 ip 00007f5e02d1797c sp 00007f5e02d179f0 error 7 in libmjrender.so[7f5e02c02000+286000]</div><div>29.03.2017 16:42    kernel    [26819.543353] test_libmjrende[12350]: segfault at 7f1f1d65b0a0 ip 00007f1f1d65b0a0 sp 00007f1f0c000fd8 error 15 in libmjrender.so[7f1f1d62e000+112000]</div></div><div>29.03.2017 16:39    kernel    [26627.190568] test_libmjrende[12297]: segfault at 8 ip 00007fe4c6851c2c sp 00007fe4c0766c90 error 4 in <a href="http://libc-2.23.so">libc-2.23.so</a>[7fe4c67d0000+1bf000]<br></div><div><br></div><div>I guess that just not all RTL are thread safe and this is not supported. Even critical sections don't work here.</div><div>This is function:</div><div><br></div><div><div>procedure Test(ACounter: Integer; AJson: PChar); cdecl;</div><div>var</div><div>  js: TJSONObject=nil;</div><div>  jp: TJSONParser=nil;</div><div>  i: Integer;</div><div>  s: String;</div><div>begin</div><div>  syslog(log_info, 'Enter: %d', [ACounter]);</div><div>  try try</div><div>    jp := TJSONParser.Create(AJson);</div><div>    js := TJSONObject(jp.Parse);</div><div>    FreeAndNil(jp);</div><div>    Sleep(500);</div><div>    i := js.Get('1', -1);</div><div>    Sleep(500);</div><div>    s := js.Get('2', '');</div><div>    syslog(log_info, 'Got %d: %d %s', [ACounter, i, pchar(s)]);</div><div>  except on e: Exception do</div><div>    begin</div><div>      syslog(log_info, 'Error: %s', [PChar(e.Message)]);</div><div>      raise;</div><div>    end;</div><div>  end;</div><div>  finally</div><div>    FreeAndNil(jp);</div><div>    FreeAndNil(js);</div><div>    syslog(log_info, 'Leave: %d', [ACounter]);</div><div>  end;</div><div>end;  </div></div><div><br></div><div>Attached also full source with library and client.</div><div><br></div><div>Regards</div></div>