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,
|
if (Log) Log->Message( LogLevel, dlHigh, "Selector: FD [%d], %s, %s - Created", FD,
|
||||||
ConnectTypeName[((Handle)? Handle->Type : 0)], ((Handle && Handle->Name)? Handle->Name : "") );
|
ConnectTypeName[((Handle)? Handle->Type : 0)], ((Handle && Handle->Name)? Handle->Name : "") );
|
||||||
}
|
}
|
||||||
else if ((*SelectHandle)->Function != Function) {
|
else {
|
||||||
// Old handle for another function, not yet removed, remove from read/write lists
|
if ((*SelectHandle)->Function != Function) {
|
||||||
Remove( FD, true, true );
|
// 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
|
// Overwrite Parameters
|
||||||
(*SelectHandle)->Handle = Handle;
|
(*SelectHandle)->Handle = Handle;
|
||||||
(*SelectHandle)->Function = Function;
|
(*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
|
// Add Read select
|
||||||
@@ -176,7 +178,7 @@ void CSelect::Remove( int FD, bool Read, bool Write )
|
|||||||
|
|
||||||
// Log event
|
// Log event
|
||||||
if (Log) Log->Message( LogLevel, dlHigh, "Selector: FD [%d], %s, %s - Remove Write", FD,
|
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
|
// Handle will be removed in Test() if both Read & Write flags are false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2055,7 +2055,7 @@ bool CSelectableCore::Write( THandle * Handle )
|
|||||||
|
|
||||||
// Check if Buffer empty
|
// Check if Buffer empty
|
||||||
if (!Handle->OutBuffer->Len()) {
|
if (!Handle->OutBuffer->Len()) {
|
||||||
// Add to Select Write list
|
// Remove from Select Write list
|
||||||
if (Selector) {
|
if (Selector) {
|
||||||
Selector->Remove( Handle->FD, false, true );
|
Selector->Remove( Handle->FD, false, true );
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user