Important Update:

- Bug fix: Handle not updated in SelectCore if SelectHandle re-used
This commit is contained in:
Charl Wentzel
2018-11-21 14:53:16 +02:00
parent bd85621b40
commit e3e5aa5258
2 changed files with 10 additions and 8 deletions

View File

@@ -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) {
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

View File

@@ -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 );
}