diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc
index 07fff9b21ad..92f83fe5be0 100644
--- a/storage/innobase/lock/lock0lock.cc
+++ b/storage/innobase/lock/lock0lock.cc
@@ -4234,10 +4234,10 @@ void lock_release_on_prepare(trx_t *trx)
     if (lock_get_type_low(lock) == LOCK_REC)
     {
       ut_ad(!lock->index->table->is_temporary());
-      if (lock_rec_get_gap(lock) || lock_get_mode(lock) != LOCK_X)
+      if (lock_rec_get_gap(lock) || lock_get_mode(lock) != LOCK_X || lock_rec_get_nth_bit(lock, PAGE_HEAP_NO_SUPREMUM))
         lock_rec_dequeue_from_page(lock);
       else
-      {
+      {  ut_ad(!(lock->mode() == LOCK_X && lock_rec_get_nth_bit(lock, PAGE_HEAP_NO_SUPREMUM)));
         ut_ad(trx->dict_operation ||
               lock->index->table->id >= DICT_HDR_FIRST_ID);
 retain_lock:
