diff --git a/src/transaction/concurrency/lock_manager.cpp b/src/transaction/concurrency/lock_manager.cpp index 615e16af289d7a5068c15c3e05f23798db423c85..afd97922cc38b8b04a3871b23d03463c0209ed02 100644 --- a/src/transaction/concurrency/lock_manager.cpp +++ b/src/transaction/concurrency/lock_manager.cpp @@ -281,7 +281,9 @@ bool LockManager::unlock(Transaction* txn, LockDataId lock_data_id) { [&](const LockRequest& lock_request) { return lock_request.txn_id_ == txn->get_transaction_id(); }); if (lock_request_queue.request_queue_.empty()) { - lock_request_queue.group_lock_mode_ = GroupLockMode::NON_LOCK; + // lock_request_queue.group_lock_mode_ = GroupLockMode::NON_LOCK; + lock_table_.erase(lock_data_id); + return true; } bool has_is = false; diff --git a/src/transaction/transaction_manager.cpp b/src/transaction/transaction_manager.cpp index 4b55c6e6f8aa1802046c6bd9cc226209192acb2a..aac01a94542602af01ab41e45255e0abbdff93f1 100644 --- a/src/transaction/transaction_manager.cpp +++ b/src/transaction/transaction_manager.cpp @@ -8,6 +8,7 @@ EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details. */ +#include <malloc.h> #include <cassert> #include "record/rm_file_handle.h" @@ -136,12 +137,14 @@ void TransactionManager::commit(Transaction* txn, LogManager* log_manager) { } txn->get_write_set()->clear(); - txn->get_write_set() = nullptr; - txn->get_lock_set() = nullptr; - txn->get_index_latch_page_set() = nullptr; - txn->get_index_deleted_page_set() = nullptr; + txn->get_write_set().reset(); + txn->get_lock_set().reset(); + txn->get_index_latch_page_set().reset(); + txn->get_index_deleted_page_set().reset(); txn->set_state(TransactionState::COMMITTED); + + malloc_trim(0); } /** @@ -258,6 +261,8 @@ void TransactionManager::abort(Transaction* txn, LogManager* log_manager) { txn->get_index_deleted_page_set() = nullptr; txn->set_state(TransactionState::ABORTED); + + malloc_trim(0); } void TransactionManager::reset_index(Transaction* txn, WType type, std::string& tab_name, Rid rid, char* old_data,