diff --git a/src/osd/osd_peering_pg.cpp b/src/osd/osd_peering_pg.cpp index 30d79e76..db010202 100644 --- a/src/osd/osd_peering_pg.cpp +++ b/src/osd/osd_peering_pg.cpp @@ -473,6 +473,8 @@ void pg_t::calc_object_states(int log_level) printf("[PG %u/%u] %ju objects on OSD set %s\n", pool_id, pg_num, stp.second.object_count, osd_set_desc.c_str()); } } + delete ps; + peering_state = NULL; } void pg_t::print_state() diff --git a/src/osd/osd_scrub.cpp b/src/osd/osd_scrub.cpp index 6f5d87c3..c2efb7b6 100644 --- a/src/osd/osd_scrub.cpp +++ b/src/osd/osd_scrub.cpp @@ -667,9 +667,16 @@ resume_2: // I/O and checksum errors (represented by stripes[i].read_error) are OK (cur_op->op_data->errcode != -EIO && cur_op->op_data->errcode != -EDOM)) { - finish_op(cur_op, cur_op->op_data->errcode); - return; } - scrub_check_results(cur_op); - finish_op(cur_op, 0); + else + { + scrub_check_results(cur_op); + cur_op->op_data->errcode = 0; + } + if (cur_op->op_data->stripes) + { + free(cur_op->op_data->stripes); + cur_op->op_data->stripes = NULL; + } + finish_op(cur_op, cur_op->op_data->errcode); }