Skip to content

Commit 952f74e

Browse files
committed
Update the flush stat before freeing a dirty index node
This is the fix to the memory access after free. Change-Id: Ib9ab4e288017f4ebdc1a6f236d88974aaf46fe10 Reviewed-on: http://review.couchbase.org/70456 Reviewed-by: Chiyoung Seo <chiyoung@couchbase.com> Tested-by: Chiyoung Seo <chiyoung@couchbase.com>
1 parent f930ff0 commit 952f74e

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

src/bnodecache.cc

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -889,19 +889,18 @@ fdb_status BnodeCacheMgr::flushDirtyIndexNodes(FileBnodeCache* fcache,
889889
// Move to the shard clean node list
890890
list_push_back(&fcache->shards[shard_num]->cleanNodes,
891891
&dirty_bnode->list_elem);
892-
892+
flushed += dirty_bnode->getNodeSize();
893893
} else {
894894
// Not synced, just discarded
895895
fcache->numItems--;
896896
fcache->numItemsWritten--;
897897
// Decrement memory usage
898898
bnodeCacheCurrentUsage.fetch_sub(dirty_bnode->getMemConsumption());
899+
flushed += dirty_bnode->getNodeSize();
899900
// Free the dirty node as it can be simply discarded
900901
delete dirty_bnode;
901902
}
902903

903-
flushed += dirty_bnode->getNodeSize();
904-
905904
spin_unlock(&fcache->shards[shard_num]->lock);
906905

907906
if (count == dirty_nodes.size()) {

0 commit comments

Comments
 (0)