From 7c33c9dbc744c62d24f58da7fb5080659834183c Mon Sep 17 00:00:00 2001 From: Charl Wentzel Date: Wed, 6 Dec 2017 09:56:28 +0200 Subject: [PATCH] Important Update: - SelectCore: - Bug fix: only remove handle from read/write list if different function --- SelectCore.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) 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) {