Web forum is in read-only mode. Login as active registered customer for write access
  Forum Search   New Posts New Posts

Handling server not running from a client's thread

 Post Reply Post Reply
Author
Sinclair Steve View Drop Down
Member
Member
Avatar

Joined: 14 Feb 2012
Posts: 56
Post Options Post Options   Quote Sinclair Steve Quote  Post ReplyReply Direct Link To This Post Topic: Handling server not running from a client's thread
    Posted: 05 Oct 2018 at 10:15am
Hi Wagner,

How shoud I go about handling exceptions in a thread when trying to connect to a RemoteDB server if the server is not running?  I have the following procedure that I am calling from a TTask to sync some data from a phone to a server.  I'm testing it on windows at the moment but getting memory leaks and runtime error 216 when I close the program.

(Using Aurelius 4.0 RemoteDB 1.3)

procedure TGenCollectSync.SyncAll( AMsg: TProc< string > );
var
  L, R: TObjectManager;
begin
  L := TObjectManager.Create( TSQLiteConnection.CreateConnection );
  try
    L.Connection.Connect;
    R := TObjectManager.Create( TRemoteDBFirebirdConnection.CreateConnection );
    try
      R.Connection.Connect;
      UploadLoads( L, R, AMsg );
      DownloadDataConfig( L, R, AMsg );
      UploadLogData( L, R, AMsg );
    finally
      R.Free;
    end;
  finally
    L.Free;
  end;
end;

I'm calling it this way from within the TTask

        try
          GenCollectSync.SyncAll(
            procedure( AMsg: string )
            begin
              TMSLogger.Trace( AMsg );
            end
            );
        except
          ECaptured := Exception( AcquireExceptionObject );
          TThread.Queue( TThread.CurrentThread,
            procedure
            begin
              raise ECaptured;
            end );

        end;

when closing the app on windows I get
---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:

1 - 12 bytes: Unknown x 2
13 - 20 bytes: TSqliteDatabase x 1, TSemaphore x 1
21 - 28 bytes: TDBConnectionFactory x 1, TDBConnectionPool x 1, TDBConnectionPool.Create[0]$ActRec x 1, TPoolItemAnonymousFactory<XData.Aurelius.ConnectionPool.TDBConnectionWrapper> x 1, TDBConnectionWrapper x 1, TSQLiteConnection x 1, TObjectPool<XData.Aurelius.ConnectionPool.TDBConnectionWrapper>.TPoolItem<XData.Aurelius.ConnectionPool.TDBConnectionWrapper> x 1, TSQLiteConnection.CreateFactory$ActRec x 1, UnicodeString x 5
29 - 36 bytes: EAccessViolation x 1, TCriticalSection x 1
37 - 44 bytes: TTMSLoggerOutputFormats x 1, TMyAureliusOutputHandler x 1, UnicodeString x 2
45 - 52 bytes: TObjectPool<XData.Aurelius.ConnectionPool.TDBConnectionWrapper> x 1, TList<System.string> x 1
53 - 60 bytes: TObjectList<TMSLoggingCore.TTMSLoggerBaseOutputHandler> x 1, UnicodeString x 1, Unknown x 1
77 - 84 bytes: UnicodeString x 1
125 - 132 bytes: TTMSFMXLogger x 1
173 - 188 bytes: UnicodeString x 1


---------------------------
Error
---------------------------
Runtime error 216 at 00408756
---------------------------
OK   
---------------------------

Thanks again

Steve

Back to Top
Sinclair Steve View Drop Down
Member
Member
Avatar

Joined: 14 Feb 2012
Posts: 56
Post Options Post Options   Quote Sinclair Steve Quote  Post ReplyReply Direct Link To This Post Posted: 05 Oct 2018 at 11:50am
Whoops did it again - sorry.  It was the writing to the log that was the problem.  Should have paid more attention to the error message 
Back to Top
 Post Reply Post Reply

Forum Jump Forum Permissions View Drop Down