]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
connection: Fix issue where closed was entered when it shouldn't have been on halt
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 25 Mar 2020 14:45:31 +0000 (08:45 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 25 Mar 2020 16:09:38 +0000 (10:09 -0600)
src/lib/server/connection.c

index 19b7216da22efe34869a4f9c7d60ac01844ad547..f5069c3f9ce24adb2803486e9e7ee9c20dc5b7dc 100644 (file)
@@ -1153,17 +1153,20 @@ void fr_connection_signal_halt(fr_connection_t *conn)
                break;
 
        case FR_CONNECTION_STATE_INIT:
-       case FR_CONNECTION_STATE_SHUTDOWN:
-       case FR_CONNECTION_STATE_TIMEOUT:
        case FR_CONNECTION_STATE_CLOSED:
                connection_state_enter_halted(conn);
                break;
 
+       /*
+        *      If the connection is any of these states it
+        *      must have completed INIT which means it has
+        *      an active handle which needs to be closed before
+        *      the connection is halted.
+        */
        case FR_CONNECTION_STATE_CONNECTED:
        case FR_CONNECTION_STATE_CONNECTING:
-               connection_state_closed_enter(conn);
-
-       /* FALL-THROUGH */
+       case FR_CONNECTION_STATE_SHUTDOWN:
+       case FR_CONNECTION_STATE_TIMEOUT:
        case FR_CONNECTION_STATE_FAILED:
                rad_assert(conn->is_closed);
                connection_state_enter_halted(conn);