[fpc-pascal] DLL calling Firebird 2: crashes at the end

Mark Morgan Lloyd markMLl.fpc-pascal at telemetry.co.uk
Sun Sep 28 13:54:12 CEST 2014


Reinier Olislagers wrote:

>> If the custom library never made any attempt to access Pascal-type
>> (long) strings, dynamic arrays, or anything else on the heap which might
>> be reallocated or extended when referenced (i.e. not just at creation),
>> then you'd not need to do anything special. But as soon as the custom
>> library tries to e.g. change the length of a string or dynamic array it
>> makes a call to the memory manager, and if it's not sharing the same
>> memory manager as the main app used to allocate the string/array that's
>> a recipe for disaster.
> Yes. 3 things:
> 1. I hopefully fixed memory allocation issues between application<>my
> dll in the previous thread. Of course if you mean my dll modifying
> strings etc in the firebird .so/.dll yes of course but why don't these
> problems then occur with the simpler application<>Firebird .dll/.so?

But when your code modifies strings in the context of the database 
library they're preallocated C-type strings, i.e. can't be extended or 
shrunk so don't make unexpected reference to any memory manager.

> 2. Corruption does not occur when I compile my dll with database layer
> code that does not call the Firebird sqldb layer i.e. the Firebird .so/.dll

Interesting. So if I understand you correctly it's only when you've got 
two levels of dynamically-loaded library, i.e. one DLL is responsible 
for loading another.

Now would probably be a good time to try Postgres as an alternative.

> 3. I've tried both with and without cmem in both application and my dll
> so they are definitely sharing the same memory manager. What the fb .so
> uses... well... who knows, probably libc?!?!

Probably libc, but not really relevant since all the allocate/free 
operations are done in the same context: the lib giveth, and the lib 
taketh away :-)

-- 
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]



More information about the fpc-pascal mailing list