[fpc-pascal] Stuck in TMSSQLConnection.Execute

Luca Olivetti luca at ventoso.org
Wed May 6 12:02:47 CEST 2026


El 6/5/26 a les 10:55, Luca Olivetti via fpc-pascal ha escrit:

As always I found the problem right after hitting "send": another thread 
started a transaction which blocks this one.
I still don't understand why (this is a select that it shouldn't be 
affected by the other transaction)

Bye

> Hello,
> 
> I encountered a strange problem in an application, that's been running 
> for over a year now.
> The application is quite convoluted with hundred of threads, one 
> (actually more than one) of those threads connects to an ms sql server 
> and now it blocks inside TMSSQLConnection.Execute, but not always
> 
> 
> procedure TMSSQLConnection.Execute(const cmd: string);
> begin
>    DBErrorStr:='';
>    DBMsgStr  :='';
>    CheckError( dbcmd(FDBProc, PAnsiChar(cmd)) );
>    CheckError( dbsqlexec(FDBProc) );  <--- this doesn't return
>    CheckError( dbresults(FDBProc) );
> end;
> 
> 
> However when I terminate the application and before the destroy method 
> of the thread is called, dbsqlexec returns and the rest of the thread 
> goes on as nothing happened.
> 
> As an experiment I wrapped the method in synchronize but that only 
> freezes the gui when it happens.
> 
> I don't know it if is relevant but I have a note in my program that I 
> have to initialize the sql server libraries in the main thread, 
> otherwise doing it in another thread eventually causes a sigsev.
> 
> I got the dlls (almost 2 years ago) following the instructions here
> 
> https://forum.lazarus.freepascal.org/index.php/ 
> topic,55037.msg409167.html#msg409167
> 
> using Environment: PLAT=Win32, WIDTH=32, VS_VERSION=2017, TDSVER=7.3
> (though older artifacts are deleted after a month)
> 
> This is on windows 32 bits, fpc 3.2.2, any hint on how to debug it further?
> 
> Bye



More information about the fpc-pascal mailing list