Skip to content

Commit 4c62c62

Browse files
author
root
committed
fix memory leak
1 parent 5556cea commit 4c62c62

File tree

1 file changed

+62
-8
lines changed

1 file changed

+62
-8
lines changed

lib/blob/blobstore.c

+62-8
Original file line numberDiff line numberDiff line change
@@ -9308,7 +9308,8 @@ bs_swap_blobs(struct spdk_blob *destblob, struct spdk_blob *srcblob)
93089308
uint32_t *active_extent_pages = NULL, *clean_extent_pages = NULL;
93099309
uint64_t *active_clusters = NULL, *clean_clusters = NULL;
93109310
uint32_t *active_pages = NULL, *clean_pages = NULL;
9311-
struct spdk_xattr *xattr;
9311+
// struct spdk_xattr *xattr;
9312+
// struct spdk_xattr *new_xattr;
93129313
assert(destblob != NULL);
93139314
assert(srcblob != NULL);
93149315

@@ -9325,16 +9326,66 @@ bs_swap_blobs(struct spdk_blob *destblob, struct spdk_blob *srcblob)
93259326

93269327
destblob->back_bs_dev = srcblob->back_bs_dev;
93279328

9329+
// Free any existing xattrs in the destination blob
93289330
xattrs_free(&destblob->xattrs);
93299331
xattrs_free(&destblob->xattrs_internal);
93309332

9331-
TAILQ_FOREACH(xattr, &srcblob->xattrs, link) {
9332-
TAILQ_INSERT_TAIL(&destblob->xattrs, xattr, link);
9333-
}
9333+
// Swap the xattrs between the source and destination blobs
9334+
TAILQ_SWAP(&destblob->xattrs, &srcblob->xattrs, spdk_xattr, link);
9335+
TAILQ_SWAP(&destblob->xattrs_internal, &srcblob->xattrs_internal, spdk_xattr, link);
9336+
9337+
// Free the xattrs in the source blob after the swap
9338+
xattrs_free(&srcblob->xattrs);
9339+
xattrs_free(&srcblob->xattrs_internal);
9340+
9341+
// TAILQ_FOREACH(xattr, &srcblob->xattrs, link) {
9342+
// new_xattr = calloc(1, sizeof(*new_xattr));
9343+
// // if (xattr == NULL) {
9344+
// // return -ENOMEM;
9345+
// // }
9346+
// new_xattr->name = malloc(strlen(xattr->name) + 1);
9347+
// // if (xattr->name == NULL) {
9348+
// // free(xattr);
9349+
// // return -ENOMEM;
9350+
// // }
9351+
9352+
// new_xattr->value = malloc(xattr->value_len);
9353+
// // if (xattr->value == NULL) {
9354+
// // free(xattr->name);
9355+
// // free(xattr);
9356+
// // return -ENOMEM;
9357+
// // }
9358+
// new_xattr->value_len = xattr->value_len;
9359+
// memcpy(new_xattr->name, xattr->name, strlen(xattr->name));
9360+
// new_xattr->name[strlen(xattr->name)] = '\0';
9361+
// memcpy(new_xattr->value, xattr->value, xattr->value_len);
9362+
// TAILQ_INSERT_TAIL(&destblob->xattrs, new_xattr, link);
9363+
// }
93349364

9335-
TAILQ_FOREACH(xattr, &srcblob->xattrs_internal, link) {
9336-
TAILQ_INSERT_TAIL(&destblob->xattrs_internal, xattr, link);
9337-
}
9365+
// TAILQ_FOREACH(xattr, &srcblob->xattrs_internal, link) {
9366+
// new_xattr = calloc(1, sizeof(*new_xattr));
9367+
// // if (xattr == NULL) {
9368+
// // return -ENOMEM;
9369+
// // }
9370+
// new_xattr->name = malloc(strlen(xattr->name) + 1);
9371+
// // if (xattr->name == NULL) {
9372+
// // free(xattr);
9373+
// // return -ENOMEM;
9374+
// // }
9375+
9376+
// new_xattr->value = malloc(xattr->value_len);
9377+
// // if (xattr->value == NULL) {
9378+
// // free(xattr->name);
9379+
// // free(xattr);
9380+
// // return -ENOMEM;
9381+
// // }
9382+
9383+
// new_xattr->value_len = xattr->value_len;
9384+
// memcpy(new_xattr->name, xattr->name, strlen(xattr->name));
9385+
// new_xattr->name[strlen(xattr->name)] = '\0';
9386+
// memcpy(new_xattr->value, xattr->value, xattr->value_len);
9387+
// TAILQ_INSERT_TAIL(&destblob->xattrs_internal, new_xattr, link);
9388+
// }
93389389

93399390
destblob->state = srcblob->state;
93409391

@@ -9407,13 +9458,15 @@ bs_update_blob_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
94079458
}
94089459
blob_free(newblob);
94099460
bs_sequence_finish(seq, bserrno);
9461+
free(ctx);
94109462
return;
94119463
}
94129464
//copy the newblob to origblob
94139465
bs_swap_blobs(origblob, newblob);
94149466
bs_dump_blob_from_mem(origblob, NULL, false, "/etc/simplyblock/");
9415-
// bs_dump_blob_from_mem(origblob, NULL, false, "/root/");
9467+
// bs_dump_blob_from_mem(origblob, NULL, false, "/root/");
94169468
bs_sequence_finish(seq, bserrno);
9469+
free(ctx);
94179470
}
94189471

94199472
static void
@@ -9482,6 +9535,7 @@ bs_update_blob_on_failover(struct spdk_blob_store *bs,
94829535
seq = bs_sequence_start_bs(bs->md_channel, &cpl);
94839536
if (!seq) {
94849537
blob_free(newblob);
9538+
free(ctx);
94859539
cb_fn(cb_arg, origblob, -ENOMEM);
94869540
return;
94879541
}

0 commit comments

Comments
 (0)