[fpc-pascal] Stack problem in externally called callback function

Wimpie Nortje wimpienortje at gmail.com
Fri Jul 31 19:05:19 CEST 2009


Hi everybody,

I am trying to use a shared lib written in C in my FPC program. The lib 
creates a number of threads and requires callbacks into the main app. It 
can call the callback from any of the threads.

When I compile without stack checking everything (seems) to work fine 
but when stack checking is on I get stack error (error 202) on entry to 
the callback function. I can break on the callback's 'begin' and see 
valid values for all the function parameters but when I step into the 
function body it crashes.

I say 'seems' when not using stack checking because when the app becomes 
large I get a lot of strange problems which would probably be explained 
by stack problems.

The .h file:
typedef int (*VortexOnAcceptedConnection)   (VortexConnection * 
connection, axlPointer data);

The pascal file:
type
      PVortexConnection = Pointer;
      TaxlPointer = Pointer;
      TVortexOnAcceptedConnection = function 
(connection:PVortexConnection;          data:TaxlPointer):longint;cdecl;

{This is the callback function called by the C library. It never gets 
called from the pascal code.}
function on_accepted(connection: PVortexConnection; data: TaxlPointer): 
longint;cdecl;
begin
  Result := 1;
end;

I have tried all the function modifiers, they all give the same problem.
I run fpc 2.2.4 on Kubuntu 9.04.

I ran the C version of this test application using valgrind and it 
doesn't give a single problem.

Any ideas or opinions will be appreciated.

Wimpie



More information about the fpc-pascal mailing list