Fastream Technologies wrote: > MadExcept did not help. :(( Yes, if the exception is handled by HandleBackGroundException() MadExcept would not catch it. But temporarily commenting Try, Except up to End in a few WndProc procedures will make it work.
--- Arno Garrels [TeamICS] http://www.overbyte.be/eng/overbyte/teamics.html > > ----- Original Message ----- > From: "Arno Garrels" <[EMAIL PROTECTED]> > To: "ICS support mailing" <twsocket@elists.org> > Sent: Friday, February 02, 2007 10:47 AM > Subject: Re: [twsocket] THttpMTServer problem with Dup > > >> Fastream Technologies wrote: >>> The exception is thrown in the function I sent. Does that mean that >>> the unprotected buffer is in that function? Or could it be >>> anywhere?? >> >> The new send buffer in V6 doesn't use a TList but a linked list >> (which is faster). I won't rely too much on the debugger in multi- >> threaded applications. "List index out of bounds()" is obviously >> raised at another location. If you want such errors happen more >> often debug on a multi-processor system. MadExcept can be very >> helpfull too since its bug reports show you the thread as well as >> the source code line where the exception happend. >> >> Good luck, >> >> Arno Garrels >> >>> Best Regards, >>> >>> SZ >>> >>> ----- Original Message ----- >>> From: "Arno Garrels" <[EMAIL PROTECTED]> >>> To: "ICS support mailing" <twsocket@elists.org> >>> Sent: Thursday, February 01, 2007 6:42 PM >>> Subject: Re: [twsocket] THttpMTServer problem with Dup >>> >>> >>>> Fastream Technologies wrote: >>>>> Q: Do one need to protect Terminated variable of TThread and >>>>> Terminate() as well? >>>> >>>> No, read/write of property Terminated should be atomic, so you >>>> won't get an error but a critical section may be usefull. >>>> >>>> if not Thread.Terminated then >>>> Thread.Terminate; >>>> >>>> If you do this from multiple threads it may happen this: >>>> >>>> if not Thread.Terminated then >>>> // thread switch occures and another >>>> // thread calls Terminate so >>>> // Terminated is now TRUE!! >>>> Thread.Terminate; >>>> >>>> >>>> --- >>>> Arno Garrels [TeamICS] >>>> http://www.overbyte.be/eng/overbyte/teamics.html >>>> >>>> >>>>> >>>>> Best Regards, >>>>> >>>>> SZ >>>>> >>>>> ----- Original Message ----- >>>>> From: "Arno Garrels" <[EMAIL PROTECTED]> >>>>> To: "ICS support mailing" <twsocket@elists.org> >>>>> Sent: Thursday, February 01, 2007 4:31 PM >>>>> Subject: Re: [twsocket] THttpMTServer problem with Dup >>>>> >>>>> >>>>>> Fastream Technologies wrote: >>>>>> >>>>>>>> I don't know this exception message, do you mean "List index >>>>>>>> out of bounds()"? >>>>>>> >>>>>>> Yes, exactly. >>>>>> >>>>>> So most likely you hit a synchronization bug in your code, hard >>>>>> to say what's wrong. Critical stuff is access to the client list, >>>>>> add/remove clients and iterate. Those things need to be >>>>>> protected very carefully. Only one thread may access the list >>>>>> at the same time. Also reading property ClientCount is unreliable >>>>>> since right after a read its value may already have changed. >>>>>> Especially take care what happens when a client disconnects as >>>>>> well as handle all possible exceptions inside the threads, >>>>>> including component exceptions. It may help if you use a >>>>>> TThreadList instead of current TList, at least it's easier to >>>>>> code thread-safe. >>>>>> >>>>>> --- >>>>>> Arno Garrels [TeamICS] >>>>>> http://www.overbyte.be/eng/overbyte/teamics.html >>>>>> >>>>>> >>>>>>> >>>>>>>> >>>>>>>> According to procedure Dup, the component state does not seem >>>>>>>> to be wsClosed. >>>>>>>> >>>>>>>> procedure TCustomWSocket.Dup(NewHSocket : TSocket); >>>>>>>> var >>>>>>>> iStatus : Integer; >>>>>>>> optlen : Integer; >>>>>>>> begin >>>>>>>> .. >>>>>>>> if FState <> wsClosed then begin >>>>>>>> iStatus := WSocket_Synchronized_closesocket(FHSocket); >>>>>>>> FHSocket := INVALID_SOCKET; >>>>>>>> if iStatus <> 0 then begin >>>>>>>> SocketError('Dup (closesocket)'); >>>>>>>> Exit; >>>>>>>> end; >>>>>>>> >>>>>>>> ChangeState(wsClosed); >>>>>>>> end; >>>>>>>> FHsocket := NewHSocket; >>>>>>>> .. >>>>>>>> >>>>>>>> --- >>>>>>>> Arno Garrels [TeamICS] >>>>>>>> http://www.overbyte.be/eng/overbyte/teamics.html >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Fastream Technologies wrote: >>>>>>>>> Hello, >>>>>>>>> >>>>>>>>> I have the following function called from worker thread >>>>>>>>> context (NewHSocket passed with a message): >>>>>>>>> >>>>>>>>> function TCustomWSocketMTServer.AfterClientCreated( >>>>>>>>> Client : TWSocketMTClient; Error: Word; NewHSocket: >>>>>>>>> integer) : boolean; var >>>>>>>>> currentClientCount: integer; >>>>>>>>> currentMaxClients: integer; >>>>>>>>> begin >>>>>>>>> Result := TRUE; >>>>>>>>> >>>>>>>>> FCriticalSection.Enter; >>>>>>>>> Inc(FClientNum); >>>>>>>>> Client.Name := Name + 'Client' + >>>>>>>>> IntToStr(FClientNum); FClientList.Add(Client); >>>>>>>>> currentClientCount := FClientList.Count; >>>>>>>>> Client.Banner := FBanner; >>>>>>>>> Client.Server := Self; >>>>>>>>> currentMaxClients := FMaxClients; >>>>>>>>> FCriticalSection.Leave; >>>>>>>>> >>>>>>>>> {$IFNDEF NO_DEBUG_LOG} >>>>>>>>> Client.IcsLogger := IcsLogger; >>>>>>>>> { V5.04 } {$ENDIF} >>>>>>>>> >>>>>>>>> Client.Dup(NewHSocket); // SOMETIMES WHEN HIGH LOAD IS IN >>>>>>>>> PLACE, THIS FUNCTION MAKES CLIENT.HSOCKET = -1 AND RAISES THE >>>>>>>>> EXCEPTION "LIST ITEM OUT OF INDEX" >>>>>>>>> Client.OnDataSent := nil; >>>>>>>>> >>>>>>>>> TriggerClientConnect(Client, Error); >>>>>>>>> >>>>>>>>> { Ok, the client is still there, process with the >>>>>>>>> connection } if (currentMaxClients > 0) and >>>>>>>>> (currentClientCount > currentMaxClients) then begin >>>>>>>>> { Sorry, too much clients } >>>>>>>>> Client.Banner := BannerTooBusy; >>>>>>>>> Client.OnDataAvailable := nil; // should be set >>>>>>>>> previously in initClient for non-503 >>>>>>>>> Client.StartConnection; >>>>>>>>> Client.CloseDelayed; >>>>>>>>> >>>>>>>>> Result := false; >>>>>>>>> end; >>>>>>>>> end; >>>>>>>>> >>>>>>>>> Any idea? >>>>>>>>> >>>>>>>>> Best Regards, >>>>>>>>> >>>>>>>>> SZ >>>>>>>> -- >>>>>>>> To unsubscribe or change your settings for TWSocket mailing >>>>>>>> list please goto >>>>>>>> http://www.elists.org/mailman/listinfo/twsocket Visit our >>>>>>>> website at http://www.overbyte.be >>>>>> -- >>>>>> To unsubscribe or change your settings for TWSocket mailing list >>>>>> please goto http://www.elists.org/mailman/listinfo/twsocket >>>>>> Visit our website at http://www.overbyte.be >>>> -- >>>> To unsubscribe or change your settings for TWSocket mailing list >>>> please goto http://www.elists.org/mailman/listinfo/twsocket >>>> Visit our website at http://www.overbyte.be >> -- >> To unsubscribe or change your settings for TWSocket mailing list >> please goto http://www.elists.org/mailman/listinfo/twsocket >> Visit our website at http://www.overbyte.be -- To unsubscribe or change your settings for TWSocket mailing list please goto http://www.elists.org/mailman/listinfo/twsocket Visit our website at http://www.overbyte.be