[fpc-devel] calls to Fpc-made library from C not thread-safe
dleducq at magellan-ing.fr
Thu Nov 30 10:53:37 CET 2006
On Thu, 30 Nov 2006 10:11:17 +0100 (CET)
Michael Van Canneyt <michael.vancanneyt at wisa.be> wrote:
> On Thu, 30 Nov 2006, Dominique Leducq wrote:
> > Hi,
> > I have a library compiled with Fpc, used from C/C++ programs.
> > When these C programs call functions of the library from different threads, things break.
> This is unfortunately true :-)
> > As I understand it, the exception stack(s), the standard input/output streams, the threadID
> > and stack checking variables use thread variables, and when the thread is created from C,
> > this variables are not allocated nor initialized.
> This is correct.
> > As a workaround, I thought I could export a function from the library, to be called in each
> > thread before any other library call, which would call CurrentTM.AllocateThreadVars and
> > System.InitThread.
> This should no longer be needed. I implemented some fixes recently which
> fixes this. If you're working with an officially released version, then you
> have the right solution. Calling CurrentTM.AllocateThreadVars should be
I use Fpc 2.1.1 (currently rev 5448), and something still seems to be needed. In which revision have your fixes been applied ?
> > And symetrically, a function to be called after any other library call in the thread,
> > which flushes the input/output streams and calls CurrentTM.ReleaseThreadVars.
> Correct. The CurrentTM.Releasevars and flushing should be done just before your
> thread ends. This should be done always, with any version of FPC.
Thanks Michael for your (very) fast answer !
More information about the fpc-devel