Hi,

1) I have a code like that:

procedure TghSQLConnector.Connect;
begin
  try
    FLib.Connect;
  except
    on E: Exception do
      DoOnException(E);
  end;
end;

 https://github.com/mdbs99/Greyhound/blob/0.1.8/src/ghsql.pas#L1565


2) DoOnException was implemented so:

procedure TghSQLHandler.DoOnException(E: Exception);
begin
  if Assigned(FOnException) then
    FOnException(Self, E)
  else
    raise E;
end;

https://github.com/mdbs99/Greyhound/blob/0.1.8/src/ghsql.pas#L443


So, as you see, if occurs a Exception the code checks if the event
(OnException) was setted. If yes, call user implementation; if no,
call raise E;
It works... but not when I uses in FPCUnit tests.

See a simple test (this works):

procedure TghSQLConnectorTest.TestOnException;
begin
  // catch
  FConn.OnException := @DoOnException;
  FConn.Script.Text := 'foo';
  FConn.Execute;
end;

https://github.com/mdbs99/Greyhound/blob/0.1.8/test/ghsqltest.pas#L246


The code DoOnException is:

procedure TghSQLTest.DoOnException(Sender: TObject; E: Exception);
begin
  AssertTrue(Assigned(E));
end;

https://github.com/mdbs99/Greyhound/blob/0.1.8/test/ghsqltest.pas#L141

So, if I change the test like bellow... BUM! SIGSEGV!!

procedure TghSQLConnectorTest.TestOnException;
begin
  // removed >>> FConn.OnException := @DoOnException;
  FConn.Script.Text := 'foo';
  FConn.Execute;
end;


The ERROR is:
[Content]
Project test raised exception class 'External: SIGSEGV'.

 At address 40B758


Can you explain this?

Marcos Douglas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to