Subject Problem with loading libfbclient.so under linux
Author b0bik2000
Hello

I have a little problem with udf function that needs to load fbclient
library under linux.

It is about: FirebirdSS-2.1.1.17910-0.ntpl.i686.tar.gz.tar

After "instalation" I did following things:

1. aliases.conf - new line pointing to my fdb file
2. firebird.conf:
RemoteServicePort = 5005
UdfAccess = Restrict UDF
BugcheckAbort = 1
3. Restart firebird server

I created a simple library with - Free Pascal Compiler:

test.dpr:

library test;

uses funcs in 'funcs.pas';

exports ftest;

begin
end.

funcs.pas:

unit funcs;

interface

uses Types;

type

TM = record
tm_sec: integer;
tm_min: integer;
tm_hour: integer;
tm_mday: integer;
tm_mon: integer;
tm_year: integer;
tm_wday: integer;
tm_yday: integer;
tm_isdst: integer;
end;

ISC_TIMESTAMP = record
timestamp_data: LongInt;
timestamp_time: DWord;
end;

PTM = ^TM;
PISC_TIMESTAMP = ^ISC_TIMESTAMP;

procedure isc_decode_timestamp(ib_date: PISC_TIMESTAMP; tm_date: PTM);
cdecl; external 'fbclient';
function ib_util_malloc(l: integer): pointer; cdecl; external
'ib_util';

function ftest(aDateTime : PISC_TIMESTAMP): Integer; cdecl;

implementation

function ftest(aDateTime: PISC_TIMESTAMP): Integer; cdecl;
var theTM: TM;
begin
Result := 0;
isc_decode_timestamp(aDateTime, @theTM); {*}
Result := 1;
end;

end.

After building library I copied it into UDF directory
(/opt/firebird/UDF/)

I declared external function using:

DECLARE EXTERNAL FUNCTION FTEST
TIMESTAMP NULL
RETURNS INTEGER BY VALUE
ENTRY_POINT 'ftest'
MODULE_NAME 'test'

After committing, I connected to my database using isql utility and
run a query:

select ftest(current_timestamp) from rdb$database

and nothing, query execution never ends. But neither fbserver nor
fbguard process takes lot of CPU time. When I connect to Linux machine
from Windows (using flamerobin) and execute the same query, flame
writes:

"Starting transaction ..."

and nothing happens too.


When I comment line marked with {*} in my udf everything works OK.

Where did I make mistake ?

Best regards
b0bik