[Lazarus] Application slow shutting down

Michael Van Canneyt michael at freepascal.org
Wed Sep 30 08:50:00 CEST 2015



On Wed, 30 Sep 2015, Susie Nicol wrote:

> Hi
>
> I have an application with a main form, and several others whuich are only
> ever used in modal form.
>
> The application is slow to terminate, and I cannot see why.  The shutdown
> procedure, simplified a little looks like this: (datamodified a global
> Boolean; savedata another procedure in the same unit; the SQLcomponents are
> in a a data module)
>
> procedure FinishUp;
>
> begin
>  if datamodified then
>    savedata;
>
> sqltransaction1.commit;
> sqlconnection.close(True);
>
> Application.Terminate  {line A}
>
> end;
>
> The debugger shows me that everything is fine until line A, when the
> program hangs: often for 15 seconds, sometimes for ever.
>
> XFCE on Linux complains that the window containing the main form cannot be
> closed because 'the application may be busy'.
>
> I have tried to replace line A with 'halt' or 'close' without any
> difference. The connection to the database is indeed closed.

1. Are you using threads ?
2. Do you create a lot of components dynamically that are freed in the destructor of the form ?

Both can cause significant delays.

>
> I am using Lazarus 1.4.2, 64-bit, Linux XFCE desktop, GTK+2 widget set.
>
> Any suggestions about where to look next will be very welcome.

What I usually do in such case is not use the debugger, but check using the strace 
command-line utility if there is still some activity in the application:

Put a writeln('something') before and after the Application.Terminate, 
and check what happens between the write() commands in strace's output.

Michael.




More information about the Lazarus mailing list