[Lazarus] Mutlithreaded Dll Callback crashes my Application

Alexander Grau alex at grauonline.de
Tue Aug 3 11:42:36 CEST 2010


Hello Maik,

My assumption is that you have discovered a (Win32 specific) FreePascal bug!

I had a similar issue when writing FreePascal in a *callback* of a Mac 
OS X libary that is called in an *non-FreePascal* thread  - the reason 
for that crash is that the FPC runtime is not correctly initialized at 
the time of the callback. Jonas fixed this for Mac OS X in FreePascal 
revision 15557 (SVN).

At the end of that thread I asked the question there if this issue does 
exist for the Windows (Win32/64) target too (and if so, maybe there is 
already a fix for this?) - Maybe we both get an answer here of the Win32 
maintainer now :-)

Here's the old thread:
http://www.mail-archive.com/fpc-pascal@lists.freepascal.org/msg21101.html

There's a FPC test for the non-FPC callback bug (for non-Win32 targets 
only):
http://svn.freepascal.org/svn/fpc/trunk/tests/test/textthr.pp


Regards,
Alexander



Maik Wojcieszak schrieb:
> Hi,
>
> I'm working on a port of a Delphi component to Lazarus. The component 
> wraps a dll for Network Communication
> based on ASPLs Vortex Library but implementing a full set of "easy to 
> use" mechanisms for "daily work problems".
>
> The dll itself is written in C++ with a C like interface. It is 
> multithreaded and uses callbacks for a lot of purposes.
> The callback function/procedure is defined like
>
> //#---------------------------------------------------------------------
> //                     CALLBACK PROCEDURES
> //#---------------------------------------------------------------------
> procedure ExecuteCommandClb(tmlhandle : TML_COMMAND_HANDLE; pCBData : 
> Pointer); cdecl;
> begin
>  //...
> end;
>
> No matter what I do inside this procedure if I reach the end the 
> assembler window is popping up in the debugger.
> The Parameters seem to be correct.
>
> pCBData is a Pointer to an object stored with the pointer to the 
> callback. The procedure is used as a proxy to call
> the real worker method of the object.
>
> tmlhandle is also a Pointer, but to an object that is implemented in 
> the dll.
>
> The callback procedure is set like         
> tml_Profile_Register_Cmd(FTMLCoreHandle, PCHAR(profile), 
> cmd.CommandId, @ExecuteCommandClb, Pointer(cmd));
>
> This command stores the inside the dlls for callbacks.
>
> I've set the user flag -dUseCThreads in the package and it is 
> inherited to my project.
>
> No matter what I do inside the ExecuteCommandClb my application will 
> crash after some calls. The Parameters seem to be correct
> because for some calls they will be used correctly.
>
> Alle this code and the dlls are tested and work stable with Delphi. 
> That's why I hope somebody can tell me
> if it is a Lazarus/FPC problem and how to solve it.
>
> Thanks in advance
> Connor
>
> My Versions:
>
> Lazarus IDE v0.9.28.2 Beta
> MS Windows XP Prof DE sp3
> FPC Version 2.2.4
>
>
>
>
>
> -- 
> _______________________________________________
> Lazarus mailing list
> Lazarus at lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>





More information about the Lazarus mailing list