|
@@ -64,6 +64,30 @@ static void rng_backend_prop_set_opened(Object *obj, bool value, Error **errp)
|
|
s->opened = true;
|
|
s->opened = true;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void rng_backend_free_request(RngRequest *req)
|
|
|
|
+{
|
|
|
|
+ g_free(req->data);
|
|
|
|
+ g_free(req);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void rng_backend_free_requests(RngBackend *s)
|
|
|
|
+{
|
|
|
|
+ GSList *i;
|
|
|
|
+
|
|
|
|
+ for (i = s->requests; i; i = i->next) {
|
|
|
|
+ rng_backend_free_request(i->data);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ g_slist_free(s->requests);
|
|
|
|
+ s->requests = NULL;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void rng_backend_finalize_request(RngBackend *s, RngRequest *req)
|
|
|
|
+{
|
|
|
|
+ s->requests = g_slist_remove(s->requests, req);
|
|
|
|
+ rng_backend_free_request(req);
|
|
|
|
+}
|
|
|
|
+
|
|
static void rng_backend_init(Object *obj)
|
|
static void rng_backend_init(Object *obj)
|
|
{
|
|
{
|
|
object_property_add_bool(obj, "opened",
|
|
object_property_add_bool(obj, "opened",
|
|
@@ -72,6 +96,13 @@ static void rng_backend_init(Object *obj)
|
|
NULL);
|
|
NULL);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void rng_backend_finalize(Object *obj)
|
|
|
|
+{
|
|
|
|
+ RngBackend *s = RNG_BACKEND(obj);
|
|
|
|
+
|
|
|
|
+ rng_backend_free_requests(s);
|
|
|
|
+}
|
|
|
|
+
|
|
static void rng_backend_class_init(ObjectClass *oc, void *data)
|
|
static void rng_backend_class_init(ObjectClass *oc, void *data)
|
|
{
|
|
{
|
|
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
|
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
|
@@ -84,6 +115,7 @@ static const TypeInfo rng_backend_info = {
|
|
.parent = TYPE_OBJECT,
|
|
.parent = TYPE_OBJECT,
|
|
.instance_size = sizeof(RngBackend),
|
|
.instance_size = sizeof(RngBackend),
|
|
.instance_init = rng_backend_init,
|
|
.instance_init = rng_backend_init,
|
|
|
|
+ .instance_finalize = rng_backend_finalize,
|
|
.class_size = sizeof(RngBackendClass),
|
|
.class_size = sizeof(RngBackendClass),
|
|
.class_init = rng_backend_class_init,
|
|
.class_init = rng_backend_class_init,
|
|
.abstract = true,
|
|
.abstract = true,
|