Implement error_abort (from upstream).
Change-Id: Id0f4affa23f60def3a221cb3643c5038cca265ad
diff --git a/include/qapi/error.h b/include/qapi/error.h
index 7d4c696..d3ef7f4 100644
--- a/include/qapi/error.h
+++ b/include/qapi/error.h
@@ -95,4 +95,9 @@
*/
void error_free(Error *err);
+/**
+ * If passed to error_set and friends, abort().
+ */
+
+extern Error *error_abort;
#endif
diff --git a/util/error.c b/util/error.c
index 3ee362a..a059cfe 100644
--- a/util/error.c
+++ b/util/error.c
@@ -23,6 +23,7 @@
ErrorClass err_class;
};
+Error *error_abort;
void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
{
Error *err;
@@ -40,6 +41,10 @@
err->msg = g_strdup_vprintf(fmt, ap);
va_end(ap);
err->err_class = err_class;
+ if (errp == &error_abort) {
+ error_report("%s", error_get_pretty(err));
+ abort();
+ }
*errp = err;
@@ -71,6 +76,10 @@
}
va_end(ap);
err->err_class = err_class;
+ if (errp == &error_abort) {
+ error_report("%s", error_get_pretty(err));
+ abort();
+ }
*errp = err;
@@ -111,6 +120,10 @@
}
va_end(ap);
err->err_class = err_class;
+ if (errp == &error_abort) {
+ error_report("%s", error_get_pretty(err));
+ abort();
+ }
*errp = err;
}
@@ -153,7 +166,10 @@
void error_propagate(Error **dst_err, Error *local_err)
{
- if (dst_err && !*dst_err) {
+ if (local_err && dst_err == &error_abort) {
+ error_report("%s", error_get_pretty(local_err));
+ abort();
+ } else if (dst_err && !*dst_err) {
*dst_err = local_err;
} else if (local_err) {
error_free(local_err);