vici: Add a destroy method to builder, allowing cancellation without error

When cancelling a builder, finalize throws an error which we might prefer
to avoid.
This commit is contained in:
Martin Willi
2014-12-12 10:23:59 +01:00
parent 971ef077ce
commit c04ee43af7
2 changed files with 18 additions and 4 deletions
+10 -4
View File
@@ -206,6 +206,13 @@ METHOD(vici_builder_t, end_list, void,
add(this, VICI_LIST_END);
}
METHOD(vici_builder_t, destroy, void,
private_vici_builder_t *this)
{
this->writer->destroy(this->writer);
free(this);
}
METHOD(vici_builder_t, finalize, vici_message_t*,
private_vici_builder_t *this)
{
@@ -215,14 +222,12 @@ METHOD(vici_builder_t, finalize, vici_message_t*,
{
DBG1(DBG_ENC, "vici builder error: %u errors (section: %u, list %u)",
this->error, this->section, this->list);
this->writer->destroy(this->writer);
free(this);
destroy(this);
return NULL;
}
product = vici_message_create_from_data(
this->writer->extract_buf(this->writer), TRUE);
this->writer->destroy(this->writer);
free(this);
destroy(this);
return product;
}
@@ -245,6 +250,7 @@ vici_builder_t *vici_builder_create()
.begin_list = _begin_list,
.end_list = _end_list,
.finalize = _finalize,
.destroy = _destroy,
},
.writer = bio_writer_create(0),
);
@@ -119,6 +119,14 @@ struct vici_builder_t {
* @return vici message, NULL on error
*/
vici_message_t* (*finalize)(vici_builder_t *this);
/**
* Destroy a vici builder without finalization.
*
* Note that finalize() already destroys the message, and calling destroy()
* is required only if the message does not get finalize()d.
*/
void (*destroy)(vici_builder_t *this);
};
/**