diff --git a/src/dsp/firmware_update.c b/src/dsp/firmware_update.c
index a52fdf6..cf27fe7 100644
--- a/src/dsp/firmware_update.c
+++ b/src/dsp/firmware_update.c
@@ -544,7 +544,7 @@
 	pldm_msgbuf_span_remaining(buf, (void **)&iter->field->ptr,
 				   &iter->field->length);
 
-	return pldm_msgbuf_destroy(buf);
+	return pldm_msgbuf_complete(buf);
 }
 
 static int decode_descriptor_type_length_value_errno(
@@ -867,7 +867,7 @@
 		}
 	}
 
-	return pldm_msgbuf_destroy_used(buf, *payload_length, payload_length);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_STABLE
@@ -1041,7 +1041,7 @@
 	/* Further calls to encode_get_firmware_parameters_resp_comp_entry
 	 * will populate the remainder */
 
-	return pldm_msgbuf_destroy_used(buf, *payload_length, payload_length);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_TESTING
@@ -1102,7 +1102,7 @@
 		return rc;
 	}
 
-	return pldm_msgbuf_destroy_used(buf, *payload_length, payload_length);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_STABLE
@@ -1242,7 +1242,7 @@
 	pldm_msgbuf_extract(buf, resp_data->max_number_of_downstream_devices);
 	pldm_msgbuf_extract(buf, resp_data->capabilities.value);
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -1286,7 +1286,7 @@
 	// Data correctness has been verified, cast it to 1-byte data directly.
 	pldm_msgbuf_insert(buf, params_req->transfer_operation_flag);
 
-	return pldm_msgbuf_destroy(buf);
+	return pldm_msgbuf_complete(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -1338,7 +1338,7 @@
 		return rc;
 	}
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return rc;
 	}
@@ -1375,7 +1375,7 @@
 	pldm_msgbuf_span_remaining(buf, (void **)&iter->field.ptr,
 				   &iter->field.length);
 
-	return pldm_msgbuf_destroy(buf);
+	return pldm_msgbuf_complete(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -1419,7 +1419,7 @@
 	// Data correctness has been verified, cast it to 1-byte data directly.
 	pldm_msgbuf_insert(buf, params_req->transfer_operation_flag);
 
-	return pldm_msgbuf_destroy(buf);
+	return pldm_msgbuf_complete(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -1468,7 +1468,7 @@
 		return rc;
 	}
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return rc;
 	}
@@ -1668,7 +1668,7 @@
 		return rc;
 	}
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -1736,7 +1736,7 @@
 
 	/* TODO: DSP0267 1.3.0 adds GetPackageDataMaximumTransferSize */
 
-	return pldm_msgbuf_destroy_used(buf, *payload_length, payload_length);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_STABLE
@@ -1842,7 +1842,7 @@
 		return rc;
 	}
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -1912,7 +1912,7 @@
 	pldm_msgbuf_insert(buf, resp_data->comp_resp);
 	pldm_msgbuf_insert(buf, resp_data->comp_resp_code);
 
-	return pldm_msgbuf_destroy_used(buf, *payload_length, payload_length);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_STABLE
@@ -2103,7 +2103,7 @@
 	pldm_msgbuf_insert(buf, resp_data->update_option_flags_enabled.value);
 	pldm_msgbuf_insert(buf, resp_data->time_before_req_fw_data);
 
-	return pldm_msgbuf_destroy_used(buf, *payload_length, payload_length);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_STABLE
@@ -2157,7 +2157,7 @@
 	pldm_msgbuf_insert(buf, req_params->offset);
 	pldm_msgbuf_insert(buf, req_params->length);
 
-	return pldm_msgbuf_destroy_used(buf, *payload_length, payload_length);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_STABLE
@@ -2230,7 +2230,7 @@
 		return rc;
 	}
 
-	return pldm_msgbuf_destroy_used(buf, *payload_length, payload_length);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_STABLE
@@ -2304,7 +2304,7 @@
 		return rc;
 	}
 
-	return pldm_msgbuf_destroy_used(buf, *payload_length, payload_length);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_STABLE
@@ -2391,7 +2391,7 @@
 	pldm_msgbuf_insert(
 		buf, req_data->comp_activation_methods_modification.value);
 
-	return pldm_msgbuf_destroy_used(buf, *payload_length, payload_length);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_STABLE
@@ -2543,7 +2543,7 @@
 	pldm_msgbuf_insert_uint8(buf, PLDM_SUCCESS);
 	pldm_msgbuf_insert(buf, resp_data->estimated_time_activation);
 
-	return pldm_msgbuf_destroy_used(buf, *payload_length, payload_length);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_STABLE
@@ -2675,7 +2675,7 @@
 	pldm_msgbuf_insert(buf, status->reason_code);
 	pldm_msgbuf_insert(buf, status->update_option_flags_enabled.value);
 
-	return pldm_msgbuf_destroy_used(buf, *payload_length, payload_length);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
 
 LIBPLDM_ABI_STABLE
@@ -2814,5 +2814,5 @@
 			   resp_data->non_functioning_component_indication);
 	pldm_msgbuf_insert(buf, resp_data->non_functioning_component_bitmap);
 
-	return pldm_msgbuf_destroy_used(buf, *payload_length, payload_length);
+	return pldm_msgbuf_complete_used(buf, *payload_length, payload_length);
 }
diff --git a/src/dsp/pdr.c b/src/dsp/pdr.c
index efc94d2..789ceeb 100644
--- a/src/dsp/pdr.c
+++ b/src/dsp/pdr.c
@@ -487,7 +487,7 @@
 			prev = pldm_pdr_get_prev_record(repo, record);
 			return pldm_pdr_remove_record(repo, record, prev);
 		}
-		rc = pldm_msgbuf_destroy(buf);
+		rc = pldm_msgbuf_complete(buf);
 		if (rc) {
 			return rc;
 		}
@@ -1641,7 +1641,7 @@
 	}
 
 	// Add new contained entity as a child of new PDR
-	rc = pldm_msgbuf_destroy(src);
+	rc = pldm_msgbuf_complete(src);
 	if (rc) {
 		goto cleanup_new_record_data;
 	}
@@ -1654,11 +1654,11 @@
 	pldm_msgbuf_copy(dst, src, uint16_t, child_entity_instance_num);
 	pldm_msgbuf_copy(dst, src, uint16_t, child_entity_container_id);
 
-	rc = pldm_msgbuf_destroy(src);
+	rc = pldm_msgbuf_complete(src);
 	if (rc) {
 		goto cleanup_new_record_data;
 	}
-	rc = pldm_msgbuf_destroy(dst);
+	rc = pldm_msgbuf_complete(dst);
 	if (rc) {
 		goto cleanup_new_record_data;
 	}
@@ -1791,15 +1791,15 @@
 	container_id = htole16(container_id);
 	memcpy(container_id_addr, &container_id, sizeof(uint16_t));
 
-	rc = pldm_msgbuf_destroy(dst);
+	rc = pldm_msgbuf_complete(dst);
 	if (rc) {
 		goto cleanup_new_record_data;
 	}
-	rc = pldm_msgbuf_destroy(src_p);
+	rc = pldm_msgbuf_complete(src_p);
 	if (rc) {
 		goto cleanup_new_record_data;
 	}
-	rc = pldm_msgbuf_destroy(src_c);
+	rc = pldm_msgbuf_complete(src_c);
 	if (rc) {
 		goto cleanup_new_record_data;
 	}
@@ -1878,7 +1878,7 @@
 			}
 		}
 	cleanup:
-		rc = pldm_msgbuf_destroy(dst);
+		rc = pldm_msgbuf_complete(dst);
 		if (rc) {
 			return rc;
 		}
@@ -2006,8 +2006,8 @@
 		pldm_msgbuf_insert(dst, e.entity_container_id);
 	}
 
-	if ((rc = pldm_msgbuf_destroy(src)) ||
-	    (rc = pldm_msgbuf_destroy(dst)) ||
+	if ((rc = pldm_msgbuf_complete(src)) ||
+	    (rc = pldm_msgbuf_complete(dst)) ||
 	    (rc = pldm_pdr_replace_record(repo, record, prev, new_record))) {
 		goto cleanup_new_record_data;
 	}
@@ -2079,7 +2079,7 @@
 	pldm_msgbuf_span_required(dst, skip_data_size, (void **)&skip_data);
 	pldm_msgbuf_extract(dst, record_fru_rsi);
 
-	rc = pldm_msgbuf_destroy(dst);
+	rc = pldm_msgbuf_complete(dst);
 	if (rc) {
 		return rc;
 	}
@@ -2166,7 +2166,7 @@
 			return pldm_pdr_remove_record(repo, record, prev);
 		}
 	cleanup:
-		rc = pldm_msgbuf_destroy(buf);
+		rc = pldm_msgbuf_complete(buf);
 		if (rc) {
 			return rc;
 		}
diff --git a/src/dsp/platform.c b/src/dsp/platform.c
index 11fa9ae..b37de42 100644
--- a/src/dsp/platform.c
+++ b/src/dsp/platform.c
@@ -298,7 +298,7 @@
 		pldm_msgbuf_extract(buf, field[i].effecter_state);
 	}
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -338,7 +338,7 @@
 	pldm_msgbuf_extract_p(buf, request_cnt);
 	pldm_msgbuf_extract_p(buf, record_chg_num);
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -499,7 +499,7 @@
 	pldm_msgbuf_extract_p(buf, largest_record_size);
 	pldm_msgbuf_extract_p(buf, data_transfer_handle_timeout);
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -559,7 +559,7 @@
 	pldm_msgbuf_extract(buf, resp->largest_record_size);
 	pldm_msgbuf_extract(buf, resp->data_transfer_handle_timeout);
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -655,7 +655,7 @@
 		pldm_msgbuf_extract_p(buf, transfer_crc);
 	}
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -713,7 +713,7 @@
 		pldm_msgbuf_extract_p(buf, transfer_crc);
 	}
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -752,7 +752,7 @@
 	pldm_msgbuf_extract_effecter_value(buf, *effecter_data_size,
 					   effecter_value);
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -990,7 +990,7 @@
 		pldm_msgbuf_extract(buf, field[i].event_state);
 	}
 
-	rc = pldm_msgbuf_destroy_consumed(buf);
+	rc = pldm_msgbuf_complete_consumed(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -1024,7 +1024,7 @@
 	pldm_msgbuf_extract(buf, sensor_rearm->byte);
 	pldm_msgbuf_extract_p(buf, reserved);
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -1095,7 +1095,7 @@
 	pldm_msgbuf_extract_p(buf, tid);
 	pldm_msgbuf_extract_p(buf, event_class);
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -1168,7 +1168,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -1256,7 +1256,7 @@
 			return PLDM_ERROR_INVALID_LENGTH;
 		}
 
-		rc = pldm_msgbuf_destroy(buf);
+		rc = pldm_msgbuf_complete(buf);
 		if (rc) {
 			return pldm_xlate_errno(rc);
 		}
@@ -1288,7 +1288,7 @@
 		pldm_msgbuf_insert(buf, checksum);
 	}
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -1390,7 +1390,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -1455,7 +1455,7 @@
 
 	pldm_msgbuf_extract_p(buf, terminus_max_buffer_size);
 
-	rc = pldm_msgbuf_destroy_consumed(buf);
+	rc = pldm_msgbuf_complete_consumed(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -1548,7 +1548,7 @@
 	}
 
 	if (*number_event_class_returned == 0) {
-		rc = pldm_msgbuf_destroy(buf);
+		rc = pldm_msgbuf_complete(buf);
 		if (rc) {
 			return pldm_xlate_errno(rc);
 		}
@@ -1564,7 +1564,7 @@
 		pldm_msgbuf_extract(buf, event_class[i]);
 	}
 
-	rc = pldm_msgbuf_destroy_consumed(buf);
+	rc = pldm_msgbuf_complete_consumed(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -1631,7 +1631,7 @@
 	*event_class_data_offset =
 		sizeof(*sensor_id) + sizeof(*sensor_event_class_type);
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -1662,7 +1662,7 @@
 	pldm_msgbuf_extract_p(buf, present_op_state);
 	pldm_msgbuf_extract_p(buf, previous_op_state);
 
-	rc = pldm_msgbuf_destroy_consumed(buf);
+	rc = pldm_msgbuf_complete_consumed(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -1696,7 +1696,7 @@
 	pldm_msgbuf_extract_p(buf, event_state);
 	pldm_msgbuf_extract_p(buf, previous_event_state);
 
-	rc = pldm_msgbuf_destroy_consumed(buf);
+	rc = pldm_msgbuf_complete_consumed(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -1792,7 +1792,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	rc = pldm_msgbuf_destroy_consumed(buf);
+	rc = pldm_msgbuf_complete_consumed(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -1893,7 +1893,7 @@
 	pldm_msgbuf_extract_range_field_format(
 		buf, pdr_value->range_field_format, pdr_value->fatal_low);
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -2031,7 +2031,7 @@
 
 	pldm_msgbuf_extract_p(buf, effecter_id);
 
-	rc = pldm_msgbuf_destroy_consumed(buf);
+	rc = pldm_msgbuf_complete_consumed(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -2097,7 +2097,7 @@
 	pldm_msgbuf_extract_effecter_value(buf, *effecter_data_size,
 					   present_value);
 
-	rc = pldm_msgbuf_destroy_consumed(buf);
+	rc = pldm_msgbuf_complete_consumed(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -2199,7 +2199,7 @@
 	*change_record_data_offset =
 		sizeof(*event_data_format) + sizeof(*number_of_change_records);
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -2238,7 +2238,7 @@
 
 	pldm_msgbuf_extract(buf, poll_event->data_transfer_handle);
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_TESTING
@@ -2267,7 +2267,7 @@
 	pldm_msgbuf_insert(buf, poll_event->event_id);
 	pldm_msgbuf_insert(buf, poll_event->data_transfer_handle);
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -2299,7 +2299,7 @@
 	*change_entry_data_offset = sizeof(*event_data_operation) +
 				    sizeof(*number_of_change_entries);
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -2389,7 +2389,7 @@
 	pldm_msgbuf_extract_sensor_value(buf, *sensor_data_size,
 					 present_reading);
 
-	rc = pldm_msgbuf_destroy_consumed(buf);
+	rc = pldm_msgbuf_complete_consumed(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -2490,7 +2490,7 @@
 	pldm_msgbuf_extract_p(buf, sensor_id);
 	pldm_msgbuf_extract_p(buf, rearm_event_state);
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -2564,7 +2564,7 @@
 
 	pldm_msgbuf_extract_p(buf, completion_code);
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -2609,7 +2609,7 @@
 		pldm_msgbuf_extract_p(buf, heartbeat_timer);
 	}
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -2694,7 +2694,7 @@
 	pldm_msgbuf_insert(buf, data_transfer_handle);
 	pldm_msgbuf_insert(buf, event_id_to_acknowledge);
 
-	rc = pldm_msgbuf_destroy(buf);
+	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -2770,7 +2770,7 @@
 		pldm_msgbuf_extract_p(buf, event_data_integrity_checksum);
 	}
 
-	rc = pldm_msgbuf_destroy_consumed(buf);
+	rc = pldm_msgbuf_complete_consumed(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -2866,7 +2866,7 @@
 	pldm_msgbuf_extract_range_field_format(
 		buf, pdr_value->range_field_format, pdr_value->rated_min);
 
-	rc = pldm_msgbuf_destroy_consumed(buf);
+	rc = pldm_msgbuf_complete_consumed(buf);
 	if (rc) {
 		return pldm_xlate_errno(rc);
 	}
@@ -2908,7 +2908,7 @@
 
 	pldm_msgbuf_insert(buf, effecter_id);
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -2933,7 +2933,7 @@
 
 	pldm_msgbuf_extract_p(buf, effecter_id);
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -2986,7 +2986,7 @@
 		pldm_msgbuf_extract(buf, field->present_state);
 	}
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -3039,7 +3039,7 @@
 		pldm_msgbuf_insert(buf, field->present_state);
 	}
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -3132,7 +3132,7 @@
 		}
 	}
 
-	rc = pldm_msgbuf_destroy_consumed(src);
+	rc = pldm_msgbuf_complete_consumed(src);
 	if (rc < 0) {
 		return rc;
 	}
@@ -3151,9 +3151,9 @@
 		pldm_msgbuf_span_string_utf16(src, NULL, NULL);
 	}
 
-	if ((rc = pldm_msgbuf_destroy(dst)) ||
-	    (rc = pldm_msgbuf_destroy(src)) ||
-	    (rc = pldm_msgbuf_destroy(buf))) {
+	if ((rc = pldm_msgbuf_complete(dst)) ||
+	    (rc = pldm_msgbuf_complete(src)) ||
+	    (rc = pldm_msgbuf_complete(buf))) {
 		return rc;
 	}
 
@@ -3218,7 +3218,7 @@
 		pdr->names[i].tag = loc;
 	}
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -3273,7 +3273,7 @@
 		return rc;
 	}
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_STABLE
diff --git a/src/firmware_device/fd.c b/src/firmware_device/fd.c
index d43b6cc..9ac1ab8 100644
--- a/src/firmware_device/fd.c
+++ b/src/firmware_device/fd.c
@@ -363,8 +363,8 @@
 		}
 	}
 
-	return pldm_msgbuf_destroy_used(buf, *resp_payload_len,
-					resp_payload_len);
+	return pldm_msgbuf_complete_used(buf, *resp_payload_len,
+					 resp_payload_len);
 }
 
 LIBPLDM_CC_NONNULL
diff --git a/src/msgbuf.h b/src/msgbuf.h
index b4616b6..437b423 100644
--- a/src/msgbuf.h
+++ b/src/msgbuf.h
@@ -143,11 +143,8 @@
  *
  * @param[in] ctx - pldm_msgbuf context for extractor
  *
- * @return PLDM_SUCCESS iff there are zero bytes of data that remain unread from
- * the buffer and no overflow has occurred. Otherwise, PLDM_ERROR_INVALID_LENGTH
- * indicates that an incorrect sequence of accesses have occurred, and
- * PLDM_ERROR_INVALID_DATA indicates that the provided context was not a valid
- * pointer.
+ * @return 0 iff there are zero bytes of data that remain unread from the buffer
+ * and no overflow has occurred. Otherwise, -EBADMSG.
  */
 LIBPLDM_CC_NONNULL
 LIBPLDM_CC_ALWAYS_INLINE
@@ -162,19 +159,16 @@
 }
 
 /**
- * @brief Destroy the pldm buf
+ * @brief Complete the pldm_msgbuf instance
  *
  * @param[in] ctx - pldm_msgbuf context for extractor
  *
- * @return PLDM_SUCCESS if all buffer accesses were in-bounds,
- * PLDM_ERROR_INVALID_DATA if the ctx parameter is invalid, or
- * PLDM_ERROR_INVALID_LENGTH if prior accesses would have occurred beyond the
- * bounds of the buffer.
+ * @return 0 if all buffer accesses were in-bounds, -EOVERFLOW otherwise.
  */
 LIBPLDM_CC_NONNULL
 LIBPLDM_CC_ALWAYS_INLINE
 LIBPLDM_CC_WARN_UNUSED_RESULT
-int pldm_msgbuf_destroy(struct pldm_msgbuf *ctx)
+int pldm_msgbuf_complete(struct pldm_msgbuf *ctx)
 {
 	int valid;
 
@@ -187,20 +181,18 @@
 }
 
 /**
- * @brief Destroy the pldm_msgbuf instance, and check that the underlying buffer
- * has been completely consumed without overflow
+ * @brief Complete the pldm_msgbuf instance, and check that the underlying buffer
+ * has been entirely consumed without overflow
  *
  * @param[in] ctx - pldm_msgbuf context
  *
- * @return PLDM_SUCCESS if all buffer access were in-bounds and completely
- * consume the underlying buffer. Otherwise, PLDM_ERROR_INVALID_DATA if the ctx
- * parameter is invalid, or PLDM_ERROR_INVALID_LENGTH if prior accesses would
- * have occurred byond the bounds of the buffer
+ * @return 0 if all buffer access were in-bounds and completely consume the
+ * underlying buffer. Otherwise, -EBADMSG.
  */
 LIBPLDM_CC_NONNULL
 LIBPLDM_CC_ALWAYS_INLINE
 LIBPLDM_CC_WARN_UNUSED_RESULT
-int pldm_msgbuf_destroy_consumed(struct pldm_msgbuf *ctx)
+int pldm_msgbuf_complete_consumed(struct pldm_msgbuf *ctx)
 {
 	int consumed;
 
@@ -1009,7 +1001,7 @@
 		/*
 		 * We have hit the end of the buffer prior to the NUL terminator.
 		 * Optimistically, the NUL terminator was one-beyond-the-end. Setting
-		 * ctx->remaining negative ensures the `pldm_msgbuf_destroy*()` APIs also
+		 * ctx->remaining negative ensures the `pldm_msgbuf_complete*()` APIs also
 		 * return an error.
 		 */
 		ctx->remaining = -1;
@@ -1082,7 +1074,7 @@
 		/*
 		 * Optimistically, the last required pattern byte was one beyond the end of
 		 * the buffer. Setting ctx->remaining negative ensures the
-		 * `pldm_msgbuf_destroy*()` APIs also return an error.
+		 * `pldm_msgbuf_complete*()` APIs also return an error.
 		 */
 		ctx->remaining = -1;
 		return -EOVERFLOW;
@@ -1185,7 +1177,8 @@
 }
 
 /**
- * Return the number of bytes used in a msgbuf instance.
+ * @brief Complete the pldm_msgbuf instance and return the number of bytes
+ * consumed.
  *
  * @param ctx - The msgbuf.
  * @param orig_len - The original size of the msgbuf, the `len` argument passed to
@@ -1195,12 +1188,14 @@
  * This can be called after a number of pldm_msgbuf_insert...() calls to
  * determine the total size that was written.
  *
+ * @return 0 on success, -EOVERFLOW if an implausible orig_len was provided or
+ * an out-of-bounds access occurred.
  */
 LIBPLDM_CC_NONNULL
 LIBPLDM_CC_ALWAYS_INLINE
 LIBPLDM_CC_WARN_UNUSED_RESULT
-int pldm_msgbuf_destroy_used(struct pldm_msgbuf *ctx, size_t orig_len,
-			     size_t *ret_used_len)
+int pldm_msgbuf_complete_used(struct pldm_msgbuf *ctx, size_t orig_len,
+			      size_t *ret_used_len)
 {
 	int rc;
 
diff --git a/src/oem/meta/file_io.c b/src/oem/meta/file_io.c
index db9407b..cd125ef 100644
--- a/src/oem/meta/file_io.c
+++ b/src/oem/meta/file_io.c
@@ -52,7 +52,7 @@
 		return rc;
 	}
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_DEPRECATED_UNSAFE
@@ -142,7 +142,7 @@
 		return -EPROTO;
 	}
 
-	return pldm_msgbuf_destroy_consumed(buf);
+	return pldm_msgbuf_complete_consumed(buf);
 }
 
 LIBPLDM_ABI_STABLE
@@ -214,5 +214,5 @@
 		return -EPROTO;
 	}
 
-	return pldm_msgbuf_destroy(buf);
+	return pldm_msgbuf_complete(buf);
 }
diff --git a/tests/dsp/firmware_update.cpp b/tests/dsp/firmware_update.cpp
index 7c406aa..6961483 100644
--- a/tests/dsp/firmware_update.cpp
+++ b/tests/dsp/firmware_update.cpp
@@ -1657,7 +1657,7 @@
     pldm_msgbuf_insert_uint32(buf, downstream_devices_length_resp);
     pldm_msgbuf_insert_uint16(buf, number_of_downstream_devices_resp);
 
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     rc = decode_query_downstream_identifiers_resp(
         response, PLDM_QUERY_DOWNSTREAM_IDENTIFIERS_RESP_MIN_LEN, &resp_data,
@@ -1700,7 +1700,7 @@
     pldm_msgbuf_insert_uint32(buf, downstream_devices_length_resp);
     pldm_msgbuf_insert_uint16(buf, number_of_downstream_devices_resp);
 
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     rc = decode_query_downstream_identifiers_resp(
         response, PLDM_QUERY_DOWNSTREAM_IDENTIFIERS_RESP_MIN_LEN, &resp, &devs);
@@ -1751,7 +1751,7 @@
     pldm_msgbuf_insert_uint16(buf, 4);
     pldm_msgbuf_insert_uint32(buf, 412);
 
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     rc = decode_query_downstream_identifiers_resp(response, payloadLen,
                                                   &resp_data, &devs);
@@ -1849,7 +1849,7 @@
     pldm_msgbuf_insert_uint16(buf, descriptor_id_len_iana_pen);
     pldm_msgbuf_insert_uint32(buf, iana_pen_openbmc);
 
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     rc = decode_query_downstream_identifiers_resp(response, payloadLen,
                                                   &resp_data, &devs);
@@ -1965,7 +1965,7 @@
     pldm_msgbuf_insert_uint16(buf, descriptor_id_len_iana_pen);
     pldm_msgbuf_insert_uint32(buf, iana_pen_dmtf);
 
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     rc = decode_query_downstream_identifiers_resp(response, payloadLen,
                                                   &resp_data, &devs);
@@ -2081,7 +2081,7 @@
     pldm_msgbuf_insert_uint16(buf, descriptor_id_len_iana_pen);
     pldm_msgbuf_insert_uint32(buf, iana_pen_dmtf);
 
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     rc = decode_query_downstream_identifiers_resp(response, payloadLen,
                                                   &resp_data, &devs);
@@ -2361,7 +2361,7 @@
         buf, pendingComponentVersionStringLength, "zyxwvuts", 8);
     ASSERT_EQ(rc, 0);
 
-    rc = pldm_msgbuf_destroy_consumed(buf);
+    rc = pldm_msgbuf_complete_consumed(buf);
     ASSERT_EQ(rc, 0);
 
     struct pldm_get_downstream_firmware_parameters_resp resp_data = {};
@@ -2510,7 +2510,7 @@
         ASSERT_EQ(rc, 0);
     }
 
-    rc = pldm_msgbuf_destroy_consumed(buf);
+    rc = pldm_msgbuf_complete_consumed(buf);
     ASSERT_EQ(rc, 0);
 
     struct pldm_get_downstream_firmware_parameters_resp resp_data = {};
diff --git a/tests/dsp/pdr.cpp b/tests/dsp/pdr.cpp
index 3b72cb7..b85ba2a 100644
--- a/tests/dsp/pdr.cpp
+++ b/tests/dsp/pdr.cpp
@@ -81,7 +81,7 @@
     pldm_msgbuf_extract_uint8(buf, association_pdr_test.num_children);
     getEntity(buf, child_entity);
 
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     EXPECT_TRUE(association_pdr_test == association_pdr);
     EXPECT_TRUE(container_entity == container_entity1);
diff --git a/tests/dsp/platform.cpp b/tests/dsp/platform.cpp
index 387e70a..9b3a43b 100644
--- a/tests/dsp/platform.cpp
+++ b/tests/dsp/platform.cpp
@@ -486,7 +486,7 @@
                                        sizeof(recordData) - 1);
     ASSERT_EQ(rc, 0);
     pldm_msgbuf_insert_uint8(buf, 96);
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     alignas(pldm_get_pdr_resp) unsigned char
         resp_data[sizeof(pldm_get_pdr_resp) + sizeof(recordData) - 1];
@@ -730,7 +730,7 @@
     pldm_msgbuf_insert_uint32(buf, 100);
     pldm_msgbuf_insert_uint32(buf, UINT32_MAX);
     pldm_msgbuf_insert_uint8(buf, PLDM_NO_TIMEOUT);
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     struct pldm_pdr_repository_info_resp resp;
     rc = decode_get_pdr_repository_info_resp_safe(
@@ -1482,7 +1482,7 @@
     pldm_msgbuf_extract_uint8(buf, retTransferOperationFlag);
     pldm_msgbuf_extract_uint32(buf, retDataTransferHandle);
     pldm_msgbuf_extract_uint16(buf, retEventIdToAcknowledge);
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     EXPECT_EQ(retFormatVersion, formatVersion);
     EXPECT_EQ(retTransferOperationFlag, transferOperationFlag);
@@ -1521,7 +1521,7 @@
     pldm_msgbuf_extract_uint8(buf, retTransferOperationFlag);
     pldm_msgbuf_extract_uint32(buf, retDataTransferHandle);
     pldm_msgbuf_extract_uint16(buf, retEventIdToAcknowledge);
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     EXPECT_EQ(retFormatVersion, formatVersion);
     EXPECT_EQ(retTransferOperationFlag, transferOperationFlag);
@@ -1560,7 +1560,7 @@
     pldm_msgbuf_extract_uint8(buf, retTransferOperationFlag);
     pldm_msgbuf_extract_uint32(buf, retDataTransferHandle);
     pldm_msgbuf_extract_uint16(buf, retEventIdToAcknowledge);
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     EXPECT_EQ(retFormatVersion, formatVersion);
     EXPECT_EQ(retTransferOperationFlag, transferOperationFlag);
@@ -2057,7 +2057,7 @@
     EXPECT_EQ(retEventDataIntegrityChecksum, eventDataIntegrityChecksum);
     EXPECT_EQ(0, memcmp(pEventData, retEventData, eventDataSize));
 
-    EXPECT_EQ(pldm_msgbuf_destroy(buf), PLDM_SUCCESS);
+    EXPECT_EQ(pldm_msgbuf_complete(buf), PLDM_SUCCESS);
 }
 
 TEST(PollForPlatformEventMessage, testGoodEncodeResposeP2)
@@ -2097,7 +2097,7 @@
     EXPECT_EQ(retCompletionCode, completionCode);
     EXPECT_EQ(retTid, tId);
     EXPECT_EQ(retEventId, eventId);
-    EXPECT_EQ(pldm_msgbuf_destroy(buf), PLDM_SUCCESS);
+    EXPECT_EQ(pldm_msgbuf_complete(buf), PLDM_SUCCESS);
 }
 
 TEST(PollForPlatformEventMessage, testGoodEncodeResposeP3)
@@ -2137,7 +2137,7 @@
     EXPECT_EQ(retCompletionCode, completionCode);
     EXPECT_EQ(retTid, tId);
     EXPECT_EQ(retEventId, eventId);
-    EXPECT_EQ(pldm_msgbuf_destroy(buf), PLDM_SUCCESS);
+    EXPECT_EQ(pldm_msgbuf_complete(buf), PLDM_SUCCESS);
 }
 
 TEST(PollForPlatformEventMessage, testGoodEncodeResposeP4)
@@ -2202,7 +2202,7 @@
     EXPECT_EQ(retEventDataSize, eventDataSize);
     EXPECT_EQ(retEventDataIntegrityChecksum, eventDataIntegrityChecksum);
 
-    EXPECT_EQ(pldm_msgbuf_destroy(buf), PLDM_SUCCESS);
+    EXPECT_EQ(pldm_msgbuf_complete(buf), PLDM_SUCCESS);
 }
 
 TEST(PollForPlatformEventMessage, testBadEncodeResponse)
@@ -2360,7 +2360,7 @@
     pldm_msgbuf_extract_uint8(buf, req.event_class);
     data = nullptr;
     pldm_msgbuf_span_remaining(buf, &data, &len);
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     EXPECT_EQ(formatVersion, req.format_version);
     EXPECT_EQ(Tid, req.tid);
@@ -2385,7 +2385,7 @@
 
     data = nullptr;
     pldm_msgbuf_span_remaining(buf, &data, &len);
-    ASSERT_EQ(pldm_msgbuf_destroy_consumed(buf), 0);
+    ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
 
     EXPECT_EQ(formatVersion, req.format_version);
     EXPECT_EQ(Tid, req.tid);
@@ -2684,7 +2684,7 @@
     EXPECT_EQ(retFormatVersion, poll_event.format_version);
     EXPECT_EQ(reteventID, poll_event.event_id);
     EXPECT_EQ(retDataTransferHandle, poll_event.data_transfer_handle);
-    EXPECT_EQ(pldm_msgbuf_destroy_consumed(buf), PLDM_SUCCESS);
+    EXPECT_EQ(pldm_msgbuf_complete_consumed(buf), PLDM_SUCCESS);
 }
 #endif
 
diff --git a/tests/msgbuf.cpp b/tests/msgbuf.cpp
index fc3c0c8..bb64be9 100644
--- a/tests/msgbuf.cpp
+++ b/tests/msgbuf.cpp
@@ -57,7 +57,7 @@
     uint8_t buf[1] = {};
 
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, destroy_exact)
@@ -70,7 +70,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, val), 0);
     EXPECT_EQ(val, 0xa5);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, destroy_over)
@@ -84,7 +84,7 @@
     ASSERT_EQ(pldm_msgbuf_extract_uint8(ctx, val), 0);
     ASSERT_EQ(val, 0xa5);
     EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, destroy_under)
@@ -97,7 +97,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, val), 0);
     EXPECT_EQ(val, 0x5a);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, extract_one_uint8)
@@ -110,7 +110,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, val), 0);
     EXPECT_EQ(val, 0xa5);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, extract_over_uint8)
@@ -122,7 +122,7 @@
 
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_under_uint8)
@@ -136,7 +136,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN;
     EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_one_int8)
@@ -149,7 +149,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_extract_int8(ctx, val), 0);
     EXPECT_EQ(val, -1);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, extract_over_int8)
@@ -161,7 +161,7 @@
 
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     EXPECT_NE(pldm_msgbuf_extract_int8(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_under_int8)
@@ -175,7 +175,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN;
     EXPECT_NE(pldm_msgbuf_extract_int8(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_one_uint16)
@@ -188,7 +188,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctx, val), 0);
     EXPECT_EQ(val, 0x5aa5);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, extract_under_uint16)
@@ -202,7 +202,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
     EXPECT_NE(pldm_msgbuf_extract_uint16(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_over_uint16)
@@ -214,7 +214,7 @@
 
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     EXPECT_NE(pldm_msgbuf_extract_uint16(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_one_int16)
@@ -227,7 +227,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_extract_int16(ctx, val), 0);
     EXPECT_EQ(val, INT16_MIN);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, extract_over_int16)
@@ -239,7 +239,7 @@
 
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     EXPECT_NE(pldm_msgbuf_extract_int16(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_under_int16)
@@ -253,7 +253,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
     EXPECT_NE(pldm_msgbuf_extract_int16(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_one_uint32)
@@ -266,7 +266,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_extract_uint32(ctx, val), 0);
     EXPECT_EQ(val, 0x5a00ffa5);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, extract_over_uint32)
@@ -278,7 +278,7 @@
 
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     EXPECT_NE(pldm_msgbuf_extract_uint32(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_under_uint32)
@@ -292,7 +292,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
     EXPECT_NE(pldm_msgbuf_extract_uint32(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_one_int32)
@@ -305,7 +305,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_extract_int32(ctx, val), 0);
     EXPECT_EQ(val, INT32_MIN);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, extract_over_int32)
@@ -317,7 +317,7 @@
 
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     EXPECT_NE(pldm_msgbuf_extract_int32(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_under_int32)
@@ -331,7 +331,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
     EXPECT_NE(pldm_msgbuf_extract_int32(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_one_real32)
@@ -350,7 +350,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_extract_real32(ctx, val), 0);
     EXPECT_EQ(val, FLT_MAX);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, extract_over_real32)
@@ -362,7 +362,7 @@
 
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     EXPECT_NE(pldm_msgbuf_extract_real32(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_under_real32)
@@ -376,7 +376,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
     EXPECT_NE(pldm_msgbuf_extract_real32(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_array_uint8_buf0_req0)
@@ -388,7 +388,7 @@
 
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     EXPECT_EQ(pldm_msgbuf_extract_array_uint8(ctx, 0, arr, 0), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, extract_array_uint8_buf1_req1)
@@ -402,7 +402,7 @@
     EXPECT_EQ(
         pldm_msgbuf_extract_array_uint8(ctx, sizeof(arr), arr, sizeof(arr)), 0);
     EXPECT_EQ(arr[0], 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, extract_array_uint8_buf1_req2)
@@ -415,7 +415,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, sizeof(buf)), 0);
     EXPECT_NE(
         pldm_msgbuf_extract_array_uint8(ctx, sizeof(arr), arr, sizeof(arr)), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    ASSERT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_under_array_uint8)
@@ -428,7 +428,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN;
     EXPECT_NE(pldm_msgbuf_extract_array_uint8(ctx, 1, arr, 1), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    ASSERT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_array_char_buf0_req0)
@@ -440,7 +440,7 @@
 
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     EXPECT_EQ(pldm_msgbuf_extract_array_char(ctx, 0, arr, 0), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, extract_array_char_buf1_req1)
@@ -454,7 +454,7 @@
     EXPECT_EQ(
         pldm_msgbuf_extract_array_char(ctx, sizeof(arr), arr, sizeof(arr)), 0);
     EXPECT_EQ(arr[0], '\0');
-    ASSERT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, extract_array_char_buf1_req2)
@@ -467,7 +467,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, sizeof(buf)), 0);
     EXPECT_NE(
         pldm_msgbuf_extract_array_char(ctx, sizeof(arr), arr, sizeof(arr)), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    ASSERT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, extract_under_array_char)
@@ -480,7 +480,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN;
     EXPECT_NE(pldm_msgbuf_extract_array_char(ctx, 1, arr, 1), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    ASSERT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, consumed_under)
@@ -490,7 +490,7 @@
     uint8_t buf[1] = {};
 
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, sizeof(buf)), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), -EBADMSG);
+    EXPECT_EQ(pldm_msgbuf_complete_consumed(ctx), -EBADMSG);
 }
 
 TEST(msgbuf, consumed_exact)
@@ -502,7 +502,7 @@
 
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete_consumed(ctx), 0);
 }
 
 TEST(msgbuf, consumed_over)
@@ -516,7 +516,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, valid), 0);
     EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, invalid), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), -EBADMSG);
+    EXPECT_EQ(pldm_msgbuf_complete_consumed(ctx), -EBADMSG);
 }
 
 TEST(msgbuf, pldm_msgbuf_insert_int32_good)
@@ -537,8 +537,8 @@
     EXPECT_EQ(pldm_msgbuf_extract_int32(ctxExtract, checkVal), 0);
 
     EXPECT_EQ(src, checkVal);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, insert_under_int32)
@@ -552,7 +552,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
     EXPECT_NE(pldm_msgbuf_insert_int32(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_insert_uint32_good)
@@ -573,8 +573,8 @@
     EXPECT_EQ(pldm_msgbuf_extract_uint32(ctxExtract, checkVal), 0);
 
     EXPECT_EQ(src, checkVal);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, insert_under_uint32)
@@ -588,7 +588,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
     EXPECT_NE(pldm_msgbuf_insert_uint32(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_insert_uint16_good)
@@ -609,8 +609,8 @@
     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, checkVal), 0);
 
     EXPECT_EQ(src, checkVal);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, insert_under_uint16)
@@ -624,7 +624,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
     EXPECT_NE(pldm_msgbuf_insert_uint16(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_insert_int16_good)
@@ -645,8 +645,8 @@
     EXPECT_EQ(pldm_msgbuf_extract_int16(ctxExtract, checkVal), 0);
 
     EXPECT_EQ(src, checkVal);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, insert_under_int16)
@@ -660,7 +660,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
     EXPECT_NE(pldm_msgbuf_insert_int16(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_insert_uint8_good)
@@ -681,8 +681,8 @@
     EXPECT_EQ(pldm_msgbuf_extract_uint8(ctxExtract, checkVal), 0);
 
     EXPECT_EQ(src, checkVal);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, insert_under_uint8)
@@ -696,7 +696,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
     EXPECT_NE(pldm_msgbuf_insert_uint8(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_insert_int8_good)
@@ -717,8 +717,8 @@
     EXPECT_EQ(pldm_msgbuf_extract_int8(ctxExtract, checkVal), 0);
 
     EXPECT_EQ(src, checkVal);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, insert_under_int8)
@@ -732,7 +732,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
     EXPECT_NE(pldm_msgbuf_insert_int8(ctx, val), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_insert_array_uint8_good)
@@ -756,8 +756,8 @@
               0);
 
     EXPECT_EQ(memcmp(src, retBuff, sizeof(retBuff)), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, insert_under_array_uint8)
@@ -772,7 +772,7 @@
     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
     EXPECT_NE(
         pldm_msgbuf_insert_array_uint8(ctx, sizeof(val), val, sizeof(val)), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_insert_array_char_good)
@@ -796,8 +796,8 @@
               0);
 
     EXPECT_EQ(memcmp(src, retBuff, sizeof(retBuff)), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, insert_under_array_char)
@@ -811,7 +811,7 @@
     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
     EXPECT_NE(pldm_msgbuf_insert_array_char(ctx, sizeof(val), val, sizeof(val)),
               0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_required_good)
@@ -838,8 +838,8 @@
               0);
 
     EXPECT_EQ(memcmp(expectData, retBuff, required), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_required_bad)
@@ -863,8 +863,8 @@
     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, testVal), 0);
     EXPECT_EQ(pldm_msgbuf_span_required(ctxExtract, required, NULL), 0);
 
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, span_required_under)
@@ -878,7 +878,7 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
     ctx->remaining = INTMAX_MIN;
     EXPECT_NE(pldm_msgbuf_span_required(ctx, 1, &cursor), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_string_ascii_good)
@@ -902,7 +902,7 @@
 
     EXPECT_EQ(required, strlen(retBuff) + 1);
     EXPECT_EQ(strncmp(expectData, retBuff, strlen(retBuff) + 1), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_string_ascii_good_with_length)
@@ -930,7 +930,7 @@
     EXPECT_EQ(length, strlen(retBuff) + 1);
     EXPECT_EQ(required, length);
     EXPECT_EQ(strncmp(expectData, retBuff, strlen(retBuff) + 1), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_string_ascii_allow_null_args)
@@ -944,7 +944,7 @@
     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, testVal), 0);
     EXPECT_EQ(0x2211, testVal);
     EXPECT_EQ(pldm_msgbuf_span_string_ascii(ctxExtract, NULL, NULL), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_string_ascii_bad_no_terminator)
@@ -960,7 +960,7 @@
     EXPECT_EQ(0x2211, testVal);
     EXPECT_EQ(pldm_msgbuf_span_string_ascii(ctxExtract, (void**)&retBuff, NULL),
               -EOVERFLOW);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_string_ascii_under)
@@ -975,7 +975,7 @@
     ctxExtract->remaining = INTMAX_MIN;
     EXPECT_NE(pldm_msgbuf_span_string_ascii(ctxExtract, (void**)&retBuff, NULL),
               0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), -EOVERFLOW);
 }
 
 static size_t str16len(char16_t* startptr)
@@ -1013,7 +1013,7 @@
     ASSERT_EQ(0, (uintptr_t)retBuff & (alignof(char16_t) - 1));
     EXPECT_EQ(6, str16len((char16_t*)retBuff) + 1);
     EXPECT_EQ(0, memcmp(expectData, retBuff, sizeof(expectData)));
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_string_utf16_good2)
@@ -1059,7 +1059,7 @@
     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, testVal1), 0);
     EXPECT_EQ(0x1234, testVal1);
 
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_string_utf16_allow_null_args)
@@ -1074,7 +1074,7 @@
     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, testVal), 0);
     EXPECT_EQ(0x2211, testVal);
     EXPECT_EQ(pldm_msgbuf_span_string_utf16(ctxExtract, NULL, NULL), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_string_utf16_bad_no_terminator)
@@ -1091,7 +1091,7 @@
     EXPECT_EQ(0x2211, testVal);
     EXPECT_EQ(pldm_msgbuf_span_string_utf16(ctxExtract, (void**)&retBuff, NULL),
               -EOVERFLOW);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_string_utf16_bad_odd_size)
@@ -1108,7 +1108,7 @@
     EXPECT_EQ(0x2211, testVal);
     EXPECT_EQ(pldm_msgbuf_span_string_utf16(ctxExtract, (void**)&retBuff, NULL),
               -EOVERFLOW);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_string_utf16_mix)
@@ -1178,7 +1178,7 @@
     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, test_val), 0);
     EXPECT_EQ(0x8877, test_val);
 
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_string_utf16_under)
@@ -1193,7 +1193,7 @@
     ctxExtract->remaining = INTMAX_MIN;
     EXPECT_NE(pldm_msgbuf_span_string_utf16(ctxExtract, (void**)&retBuff, NULL),
               0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), -EOVERFLOW);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_remaining_good)
@@ -1222,8 +1222,8 @@
 
     EXPECT_EQ(remaining, sizeof(expectData));
     EXPECT_EQ(memcmp(expectData, retBuff, remaining), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, pldm_msgbuf_span_remaining_bad)
@@ -1244,8 +1244,8 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(ctxExtract, 0, buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, testVal), 0);
 
-    EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctxExtract), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(ctx), 0);
 }
 
 TEST(msgbuf, pldm_msgbuf_copy_good)
@@ -1267,8 +1267,8 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(dst, sizeof(buf1), buf1, sizeof(buf1)), 0);
     EXPECT_EQ(pldm_msgbuf_extract_uint16(dst, checkVal), 0);
 
-    EXPECT_EQ(pldm_msgbuf_destroy(src), 0);
-    EXPECT_EQ(pldm_msgbuf_destroy(dst), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(src), 0);
+    EXPECT_EQ(pldm_msgbuf_complete(dst), 0);
 
     EXPECT_EQ(buf[0], checkVal);
 }
@@ -1306,8 +1306,8 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(src, 0, msg, sizeof(msg)), 0);
     ASSERT_EQ(pldm_msgbuf_init_errno(dst, 0, buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_copy_string_ascii(dst, src), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(dst), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(src), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(dst), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(src), 0);
     EXPECT_EQ(0, memcmp(msg, buf, sizeof(buf)));
 }
 
@@ -1325,8 +1325,8 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(src, 0, msg, sizeof(msg)), 0);
     ASSERT_EQ(pldm_msgbuf_init_errno(dst, 0, buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_copy_string_ascii(dst, src), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(dst), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(src), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(dst), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(src), 0);
     EXPECT_EQ(0, memcmp(buf, msg, sizeof(msg)));
 }
 
@@ -1344,8 +1344,8 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(src, 0, msg, sizeof(msg)), 0);
     ASSERT_EQ(pldm_msgbuf_init_errno(dst, 0, buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_copy_string_ascii(dst, src), -EOVERFLOW);
-    ASSERT_EQ(pldm_msgbuf_destroy(dst), -EOVERFLOW);
-    ASSERT_EQ(pldm_msgbuf_destroy(src), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(dst), -EOVERFLOW);
+    ASSERT_EQ(pldm_msgbuf_complete(src), 0);
 }
 
 TEST(msgbuf, pldm_msgbuf_copy_string_ascii_unterminated_src)
@@ -1362,8 +1362,8 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(src, 0, msg, sizeof(msg)), 0);
     ASSERT_EQ(pldm_msgbuf_init_errno(dst, 0, buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_copy_string_ascii(dst, src), -EOVERFLOW);
-    ASSERT_EQ(pldm_msgbuf_destroy(dst), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(src), -EOVERFLOW);
+    ASSERT_EQ(pldm_msgbuf_complete(dst), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(src), -EOVERFLOW);
 }
 
 TEST(msgbuf, pldm_msgbuf_copy_utf16_exact)
@@ -1380,8 +1380,8 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(src, 0, msg, sizeof(msg)), 0);
     ASSERT_EQ(pldm_msgbuf_init_errno(dst, 0, buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_copy_string_utf16(dst, src), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(dst), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(src), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(dst), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(src), 0);
     EXPECT_EQ(0, memcmp(buf, msg, sizeof(msg)));
 }
 
@@ -1399,8 +1399,8 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(src, 0, msg, sizeof(msg)), 0);
     ASSERT_EQ(pldm_msgbuf_init_errno(dst, 0, buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_copy_string_utf16(dst, src), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(dst), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(src), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(dst), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(src), 0);
     EXPECT_EQ(0, memcmp(buf, msg, sizeof(msg)));
 }
 
@@ -1418,8 +1418,8 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(src, 0, msg, sizeof(msg)), 0);
     ASSERT_EQ(pldm_msgbuf_init_errno(dst, 0, buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_copy_string_utf16(dst, src), -EOVERFLOW);
-    ASSERT_EQ(pldm_msgbuf_destroy(dst), -EOVERFLOW);
-    ASSERT_EQ(pldm_msgbuf_destroy(src), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(dst), -EOVERFLOW);
+    ASSERT_EQ(pldm_msgbuf_complete(src), 0);
 }
 
 TEST(msgbuf, pldm_msgbuf_copy_utf16_unterminated_src)
@@ -1436,6 +1436,6 @@
     ASSERT_EQ(pldm_msgbuf_init_errno(src, 0, msg, sizeof(msg)), 0);
     ASSERT_EQ(pldm_msgbuf_init_errno(dst, 0, buf, sizeof(buf)), 0);
     EXPECT_EQ(pldm_msgbuf_copy_string_utf16(dst, src), -EOVERFLOW);
-    ASSERT_EQ(pldm_msgbuf_destroy(dst), 0);
-    ASSERT_EQ(pldm_msgbuf_destroy(src), -EOVERFLOW);
+    ASSERT_EQ(pldm_msgbuf_complete(dst), 0);
+    ASSERT_EQ(pldm_msgbuf_complete(src), -EOVERFLOW);
 }
diff --git a/tests/msgbuf_generic.c b/tests/msgbuf_generic.c
index 4ae9a2f..62160f3 100644
--- a/tests/msgbuf_generic.c
+++ b/tests/msgbuf_generic.c
@@ -36,7 +36,7 @@
     expect(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)) == 0);
     expect(pldm_msgbuf_extract(ctx, val) == 0);
     expect(val == 0xa5);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_extract_generic_int8(void)
@@ -49,7 +49,7 @@
     expect(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)) == 0);
     expect(pldm_msgbuf_extract(ctx, val) == 0);
     expect(val == -1);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_extract_generic_uint16(void)
@@ -62,7 +62,7 @@
     expect(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)) == 0);
     expect(pldm_msgbuf_extract(ctx, val) == 0);
     expect(val == 0x5aa5);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_extract_generic_int16(void)
@@ -75,7 +75,7 @@
     expect(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)) == 0);
     expect(pldm_msgbuf_extract(ctx, val) == 0);
     expect(val == INT16_MIN);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_extract_generic_uint32(void)
@@ -88,7 +88,7 @@
     expect(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)) == 0);
     expect(pldm_msgbuf_extract(ctx, val) == 0);
     expect(val == 0x5a00ffa5);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_extract_generic_int32(void)
@@ -101,7 +101,7 @@
     expect(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)) == 0);
     expect(pldm_msgbuf_extract(ctx, val) == 0);
     expect(val == INT32_MIN);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_extract_generic_real32(void)
@@ -120,7 +120,7 @@
     expect(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)) == 0);
     expect(pldm_msgbuf_extract(ctx, val) == 0);
     expect(val == FLT_MAX);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_extract_array_generic_uint8(void)
@@ -133,7 +133,7 @@
     expect(pldm_msgbuf_init_errno(ctx, sizeof(buf), buf, sizeof(buf)) == 0);
     expect(pldm_msgbuf_extract_array(ctx, 1, arr, 1) == 0);
     expect(arr[0] == 0);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_insert_generic_int32(void)
@@ -154,8 +154,8 @@
     expect(pldm_msgbuf_extract(ctxExtract, checkVal) == 0);
 
     expect(src == checkVal);
-    expect(pldm_msgbuf_destroy(ctxExtract) == 0);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctxExtract) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_insert_generic_uint32(void)
@@ -176,8 +176,8 @@
     expect(pldm_msgbuf_extract(ctxExtract, checkVal) == 0);
 
     expect(src == checkVal);
-    expect(pldm_msgbuf_destroy(ctxExtract) == 0);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctxExtract) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_insert_generic_uint16(void)
@@ -198,8 +198,8 @@
     expect(pldm_msgbuf_extract(ctxExtract, checkVal) == 0);
 
     expect(src == checkVal);
-    expect(pldm_msgbuf_destroy(ctxExtract) == 0);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctxExtract) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_insert_generic_int16(void)
@@ -220,8 +220,8 @@
     expect(pldm_msgbuf_extract(ctxExtract, checkVal) == 0);
 
     expect(src == checkVal);
-    expect(pldm_msgbuf_destroy(ctxExtract) == 0);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctxExtract) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_insert_generic_uint8(void)
@@ -242,8 +242,8 @@
     expect(pldm_msgbuf_extract(ctxExtract, checkVal) == 0);
 
     expect(src == checkVal);
-    expect(pldm_msgbuf_destroy(ctxExtract) == 0);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctxExtract) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_insert_generic_int8(void)
@@ -264,8 +264,8 @@
     expect(pldm_msgbuf_extract(ctxExtract, checkVal) == 0);
 
     expect(src == checkVal);
-    expect(pldm_msgbuf_destroy(ctxExtract) == 0);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctxExtract) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 static void test_msgbuf_insert_array_generic_uint8(void)
@@ -287,8 +287,8 @@
                                      sizeof(retBuff)) == 0);
 
     expect(memcmp(src, retBuff, sizeof(retBuff)) == 0);
-    expect(pldm_msgbuf_destroy(ctxExtract) == 0);
-    expect(pldm_msgbuf_destroy(ctx) == 0);
+    expect(pldm_msgbuf_complete(ctxExtract) == 0);
+    expect(pldm_msgbuf_complete(ctx) == 0);
 }
 
 typedef void (*testfn)(void);
diff --git a/tests/oem/meta/fileio.cpp b/tests/oem/meta/fileio.cpp
index 47c62c4..33c8c9c 100644
--- a/tests/oem/meta/fileio.cpp
+++ b/tests/oem/meta/fileio.cpp
@@ -32,7 +32,7 @@
                                         sizeof(postCode));
     ASSERT_EQ(rc, 0);
 
-    rc = pldm_msgbuf_destroy_consumed(ctx);
+    rc = pldm_msgbuf_complete_consumed(ctx);
     ASSERT_EQ(rc, 0);
 
     constexpr size_t decodedReqLen =
@@ -101,7 +101,7 @@
     pldm_msgbuf_insert_uint8(ctx, 1);
     pldm_msgbuf_insert_uint16(ctx, 1223);
 
-    rc = pldm_msgbuf_destroy_consumed(ctx);
+    rc = pldm_msgbuf_complete_consumed(ctx);
     ASSERT_EQ(rc, 0);
 
     struct pldm_oem_meta_file_io_read_req req = {};
