diff --git a/SelectCore.cpp b/SelectCore.cpp index f6d2ed0..a60bea1 100644 --- a/SelectCore.cpp +++ b/SelectCore.cpp @@ -93,19 +93,22 @@ void CSelect::Add( int FD, bool Read, bool Write, CSelectableCore * Function ) while (*Handle && ((*Handle)->FD != FD)) { Handle = &((*Handle)->Next); } - if (*Handle) { - // Old handle not yet removed, remove from read/write lists - Remove( FD, true, true ); - } - else { + if (!*Handle) { // Create if not exist *Handle = (TSelectHandle*)malloc( sizeof(TSelectHandle) ); memset( *Handle, 0, sizeof(TSelectHandle) ); - (*Handle)->FD = FD; - } - // Set Parameters - (*Handle)->Function = Function; + // Set Parameters + (*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 if (Read && !(*Handle)->Read) {