Important Update:
- SelectCore: - Bug fix: only remove handle from read/write list if different function
This commit is contained in:
@@ -93,19 +93,22 @@ void CSelect::Add( int FD, bool Read, bool Write, CSelectableCore * Function )
|
|||||||
while (*Handle && ((*Handle)->FD != FD)) {
|
while (*Handle && ((*Handle)->FD != FD)) {
|
||||||
Handle = &((*Handle)->Next);
|
Handle = &((*Handle)->Next);
|
||||||
}
|
}
|
||||||
if (*Handle) {
|
if (!*Handle) {
|
||||||
// Old handle not yet removed, remove from read/write lists
|
|
||||||
Remove( FD, true, true );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Create if not exist
|
// Create if not exist
|
||||||
*Handle = (TSelectHandle*)malloc( sizeof(TSelectHandle) );
|
*Handle = (TSelectHandle*)malloc( sizeof(TSelectHandle) );
|
||||||
memset( *Handle, 0, sizeof(TSelectHandle) );
|
memset( *Handle, 0, sizeof(TSelectHandle) );
|
||||||
(*Handle)->FD = FD;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set Parameters
|
// Set Parameters
|
||||||
(*Handle)->Function = Function;
|
(*Handle)->FD = FD;
|
||||||
|
(*Handle)->Function = Function;
|
||||||
|
}
|
||||||
|
else if ((*Handle)->Function != Function) {
|
||||||
|
// Old handle for another function, not yet removed, remove from read/write lists
|
||||||
|
Remove( FD, true, true );
|
||||||
|
|
||||||
|
// Overwrite Parameters
|
||||||
|
(*Handle)->Function = Function;
|
||||||
|
}
|
||||||
|
|
||||||
// Add Read select
|
// Add Read select
|
||||||
if (Read && !(*Handle)->Read) {
|
if (Read && !(*Handle)->Read) {
|
||||||
|
|||||||
Reference in New Issue
Block a user