diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc
index 6219ee39f75eef2d42aa7f57f7ca57a510189255..a09faee5f0eacde9a443eab76177ed0c11f79244 100644
--- a/storage/tokudb/ha_tokudb.cc
+++ b/storage/tokudb/ha_tokudb.cc
@@ -8270,7 +8270,6 @@ void ha_tokudb::cleanup_txn(DB_TXN *txn) {
         int r = cursor->c_close(cursor);
         assert(r == 0);
         cursor = NULL;
-        remove_from_trx_handler_list();
     }
 }
 
diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc
index 3f649f981156157116644b59c1c2b9579cbb38c1..49419153975416909a34e4caa143acb745b0f4e6 100644
--- a/storage/tokudb/hatoku_hton.cc
+++ b/storage/tokudb/hatoku_hton.cc
@@ -647,6 +647,7 @@ static void abort_txn_with_progress(DB_TXN* txn, THD* thd) {
 static void tokudb_cleanup_handlers(tokudb_trx_data *trx, DB_TXN *txn) {
     LIST *e;
     while ((e = trx->handlers)) {
+        trx->handlers = list_delete(trx->handlers, e);
         ha_tokudb *handler = (ha_tokudb *) e->data;
         handler->cleanup_txn(txn);
     }