From f03865f32ac664f46fc883a87e3c8610a8ddb60a Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Sat, 27 Feb 2016 13:05:44 +0200 Subject: [PATCH] Cloned DCB authentication data was freed twice This caused all Tee filter sessions to crash when the branch DCB was closed. --- server/core/dcb.c | 10 +++++++++- server/core/session.c | 5 ++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/server/core/dcb.c b/server/core/dcb.c index 87189e143..39f582f84 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -369,7 +369,15 @@ dcb_final_free(DCB *dcb) if (SESSION_STATE_DUMMY != local_session->state) { session_free(local_session); - return; + + if (local_session->client_dcb == dcb) + { + /** The client DCB is freed once all other DCBs that the session + * uses have been freed. This will guarantee that the authentication + * data will be usable for all DCBs even if the client DCB has already + * been closed. */ + return; + } } } dcb_free_all_memory(dcb); diff --git a/server/core/session.c b/server/core/session.c index e1f927b04..b7f27f3b4 100644 --- a/server/core/session.c +++ b/server/core/session.c @@ -427,7 +427,10 @@ session_free(SESSION *session) */ if (session->client_dcb) { - mysql_auth_free_client_data(session->client_dcb); + if (!DCB_IS_CLONE(session->client_dcb)) + { + mysql_auth_free_client_data(session->client_dcb); + } dcb_free_all_memory(session->client_dcb); } /**