From e3e5aa525830a4f8065c30fb7df374a050e7a0c1 Mon Sep 17 00:00:00 2001 From: Charl Wentzel Date: Wed, 21 Nov 2018 14:53:16 +0200 Subject: [PATCH] Important Update: - Bug fix: Handle not updated in SelectCore if SelectHandle re-used --- SelectCore.cpp | 16 +++++++++------- SelectableCore.cpp | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/SelectCore.cpp b/SelectCore.cpp index 65a1155..12145d0 100644 --- a/SelectCore.cpp +++ b/SelectCore.cpp @@ -106,16 +106,18 @@ void CSelect::Add( int FD, bool Read, bool Write, THandle * Handle, CSelectableC if (Log) Log->Message( LogLevel, dlHigh, "Selector: FD [%d], %s, %s - Created", FD, ConnectTypeName[((Handle)? Handle->Type : 0)], ((Handle && Handle->Name)? Handle->Name : "") ); } - else if ((*SelectHandle)->Function != Function) { - // Old handle for another function, not yet removed, remove from read/write lists - Remove( FD, true, true ); + else { + if ((*SelectHandle)->Function != Function) { + // Old handle for another function, not yet removed, remove from read/write lists + Remove( FD, true, true ); + + if (Log) Log->Message( LogLevel, dlHigh, "Selector: FD [%d], %s, %s - Removed old", FD, + ConnectTypeName[((Handle)? Handle->Type : 0)], ((Handle && Handle->Name)? Handle->Name : "") ); + } // Overwrite Parameters (*SelectHandle)->Handle = Handle; (*SelectHandle)->Function = Function; - - if (Log) Log->Message( LogLevel, dlHigh, "Selector: FD [%d], %s, %s - Re-used", FD, - ConnectTypeName[((Handle)? Handle->Type : 0)], ((Handle && Handle->Name)? Handle->Name : "") ); } // Add Read select @@ -176,7 +178,7 @@ void CSelect::Remove( int FD, bool Read, bool Write ) // Log event if (Log) Log->Message( LogLevel, dlHigh, "Selector: FD [%d], %s, %s - Remove Write", FD, - ConnectTypeName[((Handle)? Handle->Type : 0)], ((Handle && Handle->Name)? Handle->Name : "") ); + ConnectTypeName[((Handle)? Handle->Type : 0)], ((Handle && Handle->Name)? Handle->Name : "") ); } // Handle will be removed in Test() if both Read & Write flags are false } diff --git a/SelectableCore.cpp b/SelectableCore.cpp index c80eec5..e16e4b3 100644 --- a/SelectableCore.cpp +++ b/SelectableCore.cpp @@ -2055,7 +2055,7 @@ bool CSelectableCore::Write( THandle * Handle ) // Check if Buffer empty if (!Handle->OutBuffer->Len()) { - // Add to Select Write list + // Remove from Select Write list if (Selector) { Selector->Remove( Handle->FD, false, true ); }