[fpc-pascal] Reproducible code: DLL calling Firebird crashes

Mark Morgan Lloyd markMLl.fpc-pascal at telemetry.co.uk
Tue Sep 30 13:54:38 CEST 2014


Michael Van Canneyt wrote:
> On Tue, 30 Sep 2014, Mark Morgan Lloyd wrote:
> 
>> Reinier Olislagers wrote:
>>> On 29/09/2014 19:30, Reinier Olislagers wrote:
>>>> Re bug report: agreed. I'll raise it.
>>
>> Jonas has already closed it, noting
>>
>> "http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583%28v=vs.85%29.aspx 
>>
>>
>> "***
>> The entry-point function should perform only simple initialization or 
>> termination tasks. It must not call the LoadLibrary or LoadLibraryEx 
>> function (or a function that calls these functions), because this may 
>> create dependency loops in the DLL load order. This can result in a 
>> DLL being used before the system has executed its initialization code.
>> ***
>>
>> "I.e., what you are doing is unsupported ("must not call the 
>> LoadLibrary or LoadLibraryEx function"). I think that on most unix 
>> platforms, trying to load libraries from other the init function of 
>> other libraries is not supported either."
>>
>> However I'd precede that by a thought based on what Jose said. In your 
>> example, you're opening the database in the initialisation block of 
>> businesslayer.pas, which is invoked at an arbitrary position in the 
>> init sequence of the DLL/so. If that operation were moved instead to 
>> the initialisation block of testdbdll.lpr, which in the context of the 
>> DLL/so is analogous to a program's main block, it might work.
> 
> No. this is not correct. For a library, this is analogous to 
> initialization code of a unit, it's just the 'last' unit being initialized.

Does the main program explicitly call the initialisation entry point of 
the (dynamically-loaded) library, or it this done by the OS? I was under 
the impression that the two were basically asynchronous and (as a 
particular example) both the program and the library would have distinct 
copies of the system unit with their own global variables etc. hence the 
memory manager problem.

-- 
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