If we take an error path in [N]PGLS (objects_list_partial error
or bad handle) and FAILOK is set we may exec a second filter op
that reallocates a new filter without freeing the old one.
Simplify by freeing only at the end of the function or when a new
filter is (re)allocated.
Signed-off-by: Sage Weil <sage@redhat.com>
result = -EINVAL;
break;
}
+ if (filter) {
+ delete filter;
+ filter = NULL;
+ }
result = get_pgls_filter(bp, &filter);
if (result < 0)
break;
dout(10) << " pgnls result=" << result << " outdata.length()="
<< osd_op.outdata.length() << dendl;
}
- delete filter;
- filter = NULL;
break;
case CEPH_OSD_OP_PGLS_FILTER:
result = -EINVAL;
break;
}
+ if (filter) {
+ delete filter;
+ filter = NULL;
+ }
result = get_pgls_filter(bp, &filter);
if (result < 0)
break;
dout(10) << " pgls result=" << result << " outdata.length()="
<< osd_op.outdata.length() << dendl;
}
- delete filter;
- filter = NULL;
break;
case CEPH_OSD_OP_PG_HITSET_LS: