Important Update:
- Bug fix: Handle not updated in SelectCore if SelectHandle re-used
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user