May be that is is (or not ;-)) related to
http://bugs.freepascal.org/view.php?id=17360
-Laco.
Hello, this is my first post and I hope this is the correct list for
my question.
I'm getting a segmentation fault ('violaciĆ³n de segmento' in spanish)
when running the code from below on a Linux 64-bit machine (OpenSuse
10.2 64-bits).
I'm using FPC 2.2.5, so perhaps the error is already known, but I did
not find any solution in the web.
I tested the code on Windows 32 bits and Linux 32 bits too, but there
everything seems ok.
The example is about opening a Firebird connection in a thread.
When there is a Firebird exception inside this connection,
the application terminates with the segmentation fault.
Does anyone know about this error, or can anyone give me a hint, where
to look for a solution?
This is the example code:
<code>
program fbthreadtest;
{$IFDEF FPC}
{$MODE DELPHI}{$H+}
{$ENDIF}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
cthreads,
cwstring,
{$ENDIF}
Classes,
IBConnection, sqldb;
type
TFBThread = class(TThread)
private
protected
procedure Execute; override;
public
constructor Create;
end;
constructor TFBThread.Create;
begin
inherited Create(True);
FreeOnTerminate := False;
Resume;
end;
procedure TFBThread.Execute;
var
db: TIBConnection;
tr: TSQLTransaction;
q: TSQLQuery;
begin
db := TIBConnection.Create(nil);
try
db.DatabaseName := 'localhost:/home/data/Database/ssstst.gdb';
db.LoginPrompt := False;
db.HostName := '';
db.UserName := 'SYSDBA';
db.Password := 'masterkey';
db.Connected := TRUE;
tr := TSQLTransaction.Create(nil);
try
tr.DataBase := db;
tr.Action := caCommit;
tr.Params.Clear;
tr.Params.Add('isc_tpb_read_committed');
tr.Params.Add('isc_tpb_rec_version');
tr.Params.Add('isc_tpb_nowait');
db.Transaction := tr;
tr.Active := True;
q := TSQLQuery.Create(nil);
try
q.Database := db;
q.Transaction := tr;
try
Writeln('select...');
// the following line raises an exception because
rdb$databases doesn't exist.
q.SQL.Text := 'select count(*) from rdb$databases';
q.Prepare;
except
Writeln('...exception');
end;
finally
q.Free;
end;
finally
tr.Commit;
tr.Free;
end;
finally
db.Connected := False;
db.Free;
end;
end;
begin
with TFBThread.Create do begin
WaitFor;
Free;
end;
end.
</code>
Thanks,
Stefan
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel