TFPHTTPServer in ThreadMode=tmThreadPool hangs when KeepConnections=True
## Summary If the TFPHTTPServer is set with `ThreadMode=tmThreadPool` and `KeepConnections=True` then it hangs with 100% load and no OnIdle callbacks if there are open connections. ## System Information <!-- The more information are provided the easier it is to replicate the bug --> - **Operating system:** Windows - **Processor architecture:** x86 - **Compiler version:** trunk - **Device:** Computer ## Steps to reproduce Run the example project (it is basically the server+client demo projects from FPC sources in one unit). ## Example Project ```pascal program TestHttpServerThreadPool; {$mode objfpc}{$H+} uses {$IFDEF UNIX} cthreads, {$ENDIF} Classes, SysUtils, fphttpserver, fphttpclient { you can add units after this }; type THTTPServerThread = class(TThread) private fServ: TFPHttpServer; procedure ServOnIdle(Sender: TObject); procedure ServRequest(Sender: TObject; var ARequest: TFPHTTPConnectionRequest; var AResponse: TFPHTTPConnectionResponse); public procedure Execute; override; end; { THTTPServerThread } procedure THTTPServerThread.Execute; begin fServ := TFPHttpServer.Create(Nil); fServ.KeepConnections := True; fServ.KeepConnectionTimeout := 60*1000; fServ.ThreadMode := tmThreadPool; // set to tmThread to fix the issue fServ.Port := 1234; fServ.AcceptIdleTimeout := 1000; fServ.OnAcceptIdle := @ServOnIdle; fServ.OnRequest := @ServRequest; fServ.Active := True; fServ.Free; fServ := nil; end; procedure THTTPServerThread.ServOnIdle(Sender: TObject); begin Write('i'); if Terminated then fServ.Active := False; end; procedure THTTPServerThread.ServRequest(Sender: TObject; var ARequest: TFPHTTPConnectionRequest; var AResponse: TFPHTTPConnectionResponse); begin AResponse.Code := 200; AResponse.Content := ''; AResponse.ContentLength := Length(AResponse.Content); end; var Server: THTTPServerThread; Client: TFPHTTPClient; begin Server := THTTPServerThread.Create(False); while not (Assigned(Server.fServ) and Server.fServ.Active) do Sleep(10); Client := TFPHTTPClient.Create(nil); Client.KeepConnection := True; Client.Get('http://localhost:1234'); Writeln('press enter to exit'); ReadLn; Server.Free; Client.Free; end. ``` ## What is the current bug behavior? The server hangs with 100% processor load and no OnIdle callbacks. ## What is the expected (correct) behavior? 0% processor load and OnIdle callbacks like it is for the `tmThread` ThreadMode.
issue