[fpc-devel] Segmentation fault for Firebird exception inside thread
michael.vancanneyt at wisa.be
michael.vancanneyt at wisa.be
Tue Oct 25 13:24:03 CEST 2011
On Tue, 25 Oct 2011, LacaK wrote:
> May be that is is (or not ;-)) related to
> http://bugs.freepascal.org/view.php?id=17360
I don't think linux has vectored exception handling ?
Michael.
> -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 at lists.freepascal.org
>> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>>
>
> _______________________________________________
> fpc-devel maillist - fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>
More information about the fpc-devel
mailing list