diff --git a/src/kv_db.cpp b/src/kv_db.cpp index 42b89a2b..e57fca60 100644 --- a/src/kv_db.cpp +++ b/src/kv_db.cpp @@ -896,7 +896,9 @@ static void get_block(kv_db_t *db, uint64_t offset, int cur_level, int recheck_p if (op->retval != op->len) { // error + free(op->iov.buf[0].iov_base); cb(op->retval >= 0 ? -EIO : op->retval, BLK_NOCHANGE); + delete op; return; } invalidate(db, op->offset, op->version); @@ -909,6 +911,8 @@ static void get_block(kv_db_t *db, uint64_t offset, int cur_level, int recheck_p if (blk->updating > 0 && recheck_policy == KV_RECHECK_WAIT) { // Wait until block update stops + free(op->iov.buf[0].iov_base); + delete op; db->continue_update.emplace(blk->offset, [=, blk_offset = blk->offset]() { get_block(db, offset, cur_level, recheck_policy, cb);