susumu.yata
null+****@clear*****
Fri Jun 7 11:16:47 JST 2013
susumu.yata 2013-06-07 11:16:47 +0900 (Fri, 07 Jun 2013) New Revision: 01fbb69683e255322edbacb5710c9a4ea5de1797 https://github.com/groonga/grnxx/commit/01fbb69683e255322edbacb5710c9a4ea5de1797 Message: Improve error handling. Modified files: lib/grnxx/map/hash_table.cpp Modified: lib/grnxx/map/hash_table.cpp (+11 -6) =================================================================== --- lib/grnxx/map/hash_table.cpp 2013-06-07 11:09:06 +0900 (c874bc2) +++ lib/grnxx/map/hash_table.cpp 2013-06-07 11:16:47 +0900 (0d42811) @@ -367,10 +367,6 @@ bool HashTable<T>::truncate() { // Nothing to do. return true; } - header_->max_key_id = MAP_MIN_KEY_ID - 1; - header_->num_keys = 0; - header_->num_key_ids = 0; - header_->latest_link = INVALID_LINK; std::unique_ptr<KeyIDArray> new_key_ids( KeyIDArray::create(storage_, storage_node_id_, KeyIDArray::page_size() - 1)); @@ -379,8 +375,16 @@ bool HashTable<T>::truncate() { return false; } if (header_->old_key_ids_storage_node_id != STORAGE_INVALID_NODE_ID) { - storage_->unlink_node(header_->old_key_ids_storage_node_id); + if (!KeyIDArray::unlink(storage_, header_->old_key_ids_storage_node_id)) { + // Error. + KeyIDArray::unlink(storage_, new_key_ids->storage_node_id()); + return false; + } } + header_->max_key_id = MAP_MIN_KEY_ID - 1; + header_->num_keys = 0; + header_->num_key_ids = 0; + header_->latest_link = INVALID_LINK; header_->old_key_ids_storage_node_id = header_->key_ids_storage_node_id; header_->key_ids_storage_node_id = new_key_ids->storage_node_id(); Lock lock(&header_->mutex); @@ -571,10 +575,11 @@ bool HashTable<T>::rebuild() { } if (key_id <= max_key_id()) { // Error. + KeyIDArray::unlink(storage_, new_key_ids->storage_node_id()); return false; } if (header_->old_key_ids_storage_node_id != STORAGE_INVALID_NODE_ID) { - storage_->unlink_node(header_->old_key_ids_storage_node_id); + KeyIDArray::unlink(storage_, header_->old_key_ids_storage_node_id); } header_->old_key_ids_storage_node_id = header_->key_ids_storage_node_id; header_->key_ids_storage_node_id = new_key_ids->storage_node_id(); -------------- next part -------------- HTML����������������������������... Download