diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 12f0cc4ca7285c584ccd6f5a7c68871e664ffb19..60220ffc8895f92cb074c8bb11aa543776a84e64 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -336,6 +336,8 @@ THD::~THD()
 #ifndef DBUG_OFF
   dbug_sentry = THD_SENTRY_GONE;
 #endif  
+  /* Reset stmt_backup.mem_root to not double-free memory from thd.mem_root */
+  init_alloc_root(&stmt_backup.mem_root, 0, 0);
   DBUG_VOID_RETURN;
 }
 
diff --git a/sql/sql_class.h b/sql/sql_class.h
index c1cd65edf763c9ac81b007cbedf5c54b8928e832..5390e8a4ac4728a01f1c1238468157b3bf26956c 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -582,8 +582,7 @@ public:
   Statement_map stmt_map; 
   /*
     keeps THD state while it is used for active statement
-    Note, that double free_root() is safe, so we don't need to do any
-    special cleanup for it in THD destructor.
+    Note: we perform special cleanup for it in THD destructor.
   */
   Statement stmt_backup;
   /*