[fpc-devel] ref count types / threadsave question

Martin Frb lazarus at mfriebe.de
Wed Jan 2 21:46:41 CET 2019


On 02/01/2019 21:22, Benito van der Zander wrote:
> Hi,
>
> but if another core can do anything to the string, the refcount should 
> already be 2, one for this core and one for the other core, should it not?
No:

// global var
var
   Foo: String;

// main thread
Foo := getsomestring_with_refcount_1();
TMyThread.Create(false); // not suspended / start

Foo := ''; // de-ref

//TMyThread.Execute
LocalFoo := Foo; // copy from the global var

If the main threads "Foo:=''; "   is executed ...
- beginning right after fpc_AnsiStr_Incr_Ref in TMyThread did the NIL test
- and finished before the "inclocked"
then the inclocked operates in memory freed in the main thread?

Unless there is some thread save checking each time a global var is 
accessed?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20190102/e3d58c25/attachment.html>


More information about the fpc-devel mailing list