diff --git a/sql/threadpool_win.cc b/sql/threadpool_win.cc index bf1d4740a13..346f2816e39 100644 --- a/sql/threadpool_win.cc +++ b/sql/threadpool_win.cc @@ -419,8 +419,10 @@ void set_wait_timeout(connection_t *connection, ulonglong old_timeout) /* Connection destructor */ -void destroy_connection(connection_t *connection) +void destroy_connection(connection_t *connection, PTP_CALLBACK_INSTANCE instance) { + if (instance) + DisassociateCurrentThreadFromCallback(instance); if (connection->io) { WaitForThreadpoolIoCallbacks(connection->io, TRUE); @@ -583,10 +585,8 @@ static VOID CALLBACK io_completion_callback(PTP_CALLBACK_INSTANCE instance, error: /* Some error has occured. */ - if (instance) - DisassociateCurrentThreadFromCallback(instance); - destroy_connection(connection); + destroy_connection(connection, instance); free(connection); } @@ -603,7 +603,7 @@ static void CALLBACK login_callback(PTP_CALLBACK_INSTANCE instance, connection_t *connection =(connection_t *)context; if (login(connection, instance) != 0) { - destroy_connection(connection); + destroy_connection(connection, instance); free(connection); } }