faultd_object_to_bson(child, &b);
bson_append_bson(out, child->key, &b);
+ bson_destroy(&b);
break;
}
}
struct ejdb_adapter *da = to_ejdb_adapter(adapter);
EJCOLL *coll = da->coll;
bson *b;
+ int ret;
b = ejdbloadbson(coll, &oid->bson);
if (b == NULL)
return -ENOENT;
- return bson_to_faultd_object(b, result);
+ ret = bson_to_faultd_object(b, result);
+ bson_del(b);
+ return ret;
}
static int ejdb_load(struct faultd_database_adapter *adapter, struct faultd_object *query, struct faultd_object *result, uint32_t *nr)
ret = faultd_object_to_bson(query, &bq);
if (ret < 0)
- goto finish;
+ return ret;
q = ejdbcreatequery(db, &bq, NULL, 0, NULL);
if (q == NULL) {
ret = 0;
finish:
+ bson_destroy(&bq);
+
if (r != NULL)
tclistdel(r);
if (ret) {
log_error("Unable to create action data");
- goto del_action_data;
+ goto cleanup;
}
ret = faultd_event_create(DECISION_MADE_EVENT_ID, &ev_data, &new_ev);
if (ret) {
log_error("Unable to create event");
- goto del_action_data;
+ goto cleanup;
}
- faultd_event_unref(ev);
-
ret = event_processor_report_event(new_ev);
+ faultd_event_unref(new_ev);
if (ret) {
log_error("Unable to report event");
- goto unref_new_event;
+ goto cleanup;
}
- faultd_object_unref(ev_data.action_data);
- return 0;
-
-unref_new_event:
- faultd_event_unref(new_ev);
-del_action_data:
+cleanup:
faultd_object_unref(ev_data.action_data);
faultd_event_unref(ev);
return 0;
uint32_t nr;
boot_event = get_boot_event();
- if (!boot_event)
- return -ENOTSUP;
+ if (!boot_event) {
+ log_error("Unable to get boot event");
+ goto unref_ev;
+ }
ret = faultd_object_new(&query);
if (ret < 0) {
+ log_error("Unable to create faultd object");
faultd_event_unref(&boot_event->event);
- return ret;
+ goto unref_ev;
}
faultd_object_append_oid(query, EV_BOOT_EVENT, &boot_event->event.oid);
ret = faultd_object_new(&service_obj);
if (ret < 0) {
+ log_error("Unable to create faultd object");
faultd_object_unref(query);
- return ret;
+ goto unref_ev;
}
faultd_object_append_string(service_obj, SYSD_SERVICE_DBUS_PATH, sf_ev->service.dbus_path);
ret = database_load(query, NULL, &nr);
faultd_object_unref(query);
- if (ret < 0)
- return ret;
+ if (ret < 0) {
+ log_error("Unable to load database");
+ goto unref_ev;
+ }
log_debug("service failed %d times during current boot", nr);
ret = faultd_object_new(&ev_data.action_data);
- if (ret < 0)
- return ret;
+ if (ret < 0) {
+ log_error("Unable to create faultd object");
+ goto unref_ev;
+ }
if (nr < 3) {
ev_data.action = FAULTD_ACTION_SERVICE_RECOVER_ID;
if (ret) {
log_error("Unable to create action data");
- goto del_action_data;
+ goto unref_action_data;
}
ret = faultd_event_create(DECISION_MADE_EVENT_ID, &ev_data, &new_ev);
if (ret) {
log_error("Unable to create event");
- goto del_action_data;
+ goto unref_action_data;
}
- faultd_event_unref(ev);
-
ret = event_processor_report_event(new_ev);
+ faultd_event_unref(new_ev);
if (ret) {
log_error("Unable to report event");
- goto unref_new_event;
+ goto unref_action_data;
}
+unref_action_data:
faultd_object_unref(ev_data.action_data);
- return 0;
-
-unref_new_event:
- faultd_event_unref(new_ev);
- return 0;
-
-del_action_data:
- faultd_object_unref(ev_data.action_data);
+unref_ev:
faultd_event_unref(ev);
return 0;
}
int ret;
ret = faultd_object_new(&ev_data.action_data);
- if (ret < 0)
- return ret;
+ if (ret < 0) {
+ log_error("Unable to create faultd object");
+ goto unref_ev;
+ }
ret = faultd_fill_for_reboot(ev_data.action_data);
- if (ret)
- goto del_action_data;
+ if (ret) {
+ log_error("Unable to create action data");
+ faultd_object_unref(ev_data.action_data);
+ goto unref_ev;
+ }
ret = faultd_event_create(DECISION_MADE_EVENT_ID, &ev_data, &new_ev);
+ faultd_object_unref(ev_data.action_data);
if (ret) {
log_error("Unable to create event");
- goto del_action_data;
+ goto unref_ev;
}
- faultd_event_unref(ev);
-
ret = event_processor_report_event(new_ev);
+ faultd_event_unref(new_ev);
if (ret) {
log_error("Unable to report event");
- goto unref_new_event;
+ goto unref_ev;
}
- faultd_object_unref(ev_data.action_data);
- return 0;
-
-unref_new_event:
- faultd_event_unref(new_ev);
- return 0;
-
-del_action_data:
- faultd_object_unref(ev_data.action_data);
+unref_ev:
faultd_event_unref(ev);
return 0;
-
}
static struct faultd_event_handler vip_fault_event_handler = {
}
ret = event_processor_report_event(ev);
+ faultd_event_unref(ev);
if (ret) {
log_error("Unable to report event");
- goto put_event;
+ return ret;
}
return 0;
-put_event:
- faultd_event_unref(ev);
- return ret;
-
cleanup_service:
systemd_service_cleanup(&rv_ev_data.service);
-
return ret;
}
return ret;
}
- faultd_event_ref(*ev);
-
ret = event_processor_report_event(*ev);
- if (ret) {
+ if (ret)
log_error_errno(ret, "Unable to report event");
- faultd_event_unref(*ev);
- faultd_event_unref(*ev);
- }
+
+ /* we are not unrefing the event here, because it is still needed in parent function */
return ret;
}
struct sb_event_data sb_ev_data;
sd_id128_t boot_id, last_boot_id;
faultd_oid_t last_boot_event_oid;
- int ret;
+ int ret = 0;
ret = sd_id128_get_boot(&boot_id);
if (ret)
- goto error;
+ return ret;
ret = retrieve_last_boot_event(&last_boot_event_oid);
switch (ret) {
case 0:
ret = retrieve_boot_id(&last_boot_event_oid, &last_boot_id);
if (ret)
- goto error;
+ return ret;
if (!sd_id128_equal(boot_id, last_boot_id)) {
/* first start in current boot */
ret = database_get_event(&last_boot_event_oid, &booted_ev);
if (ret) {
log_error_errno(ret, "Unable to create system booted event from database");
- goto error;
+ return ret;
}
booted_ev->oid = last_boot_event_oid;
break;
default:
- goto error;
+ return ret;
break;
}
ret = generate_event(SYSTEM_BOOTED_EVENT_ID, &sb_ev_data, &booted_ev);
if (ret)
- goto error;
+ return ret;
ret = store_boot_event(&booted_ev->oid);
if (ret) {
log_error_errno(ret, "Could not store object in database");
- goto booted_ev_unref;
+ faultd_event_unref(booted_ev);
+ return ret;
}
finish:
ret = generate_event(FAULTD_STARTED_EVENT_ID, NULL, &started_ev);
if (ret)
- goto booted_ev_unref;
+ return ret;
faultd_event_unref(started_ev);
- return ret;
-
-booted_ev_unref:
- faultd_event_unref(booted_ev);
-
-error:
- return ret;
+ return 0;
}
static void startup_listener_cleanup(struct faultd_module *module)
}
rc = event_processor_report_event(ev);
- if (rc) {
+ faultd_event_unref(ev);
+ if (rc)
log_error_errno(rc, "Unable to report event: %m");
- faultd_event_unref(ev);
- }
}
finish:
return rc;