summaryrefslogtreecommitdiff
path: root/src/machine/machine.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-02-17 19:22:03 +0100
committerLennart Poettering <lennart@poettering.net>2015-02-17 19:22:36 +0100
commit0370612e0522191f929e3feb7d4937fff3d421e2 (patch)
treed991bb0f0039c499229da7b48f8e232b8fceec7b /src/machine/machine.c
parentc7abe32be167ded048a5bb8a912faf2e745b20cb (diff)
machined: make "machinectl copy-to" and "machinectl copy-from" server side operations
This way, any bus client can make use of these calls.
Diffstat (limited to 'src/machine/machine.c')
-rw-r--r--src/machine/machine.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/machine/machine.c b/src/machine/machine.c
index 223eb0f364..edd244f30d 100644
--- a/src/machine/machine.c
+++ b/src/machine/machine.c
@@ -74,6 +74,9 @@ fail:
void machine_free(Machine *m) {
assert(m);
+ while (m->operations)
+ machine_operation_unref(m->operations);
+
if (m->in_gc_queue)
LIST_REMOVE(gc_queue, m->manager->machine_gc_queue, m);
@@ -501,6 +504,28 @@ int machine_kill(Machine *m, KillWho who, int signo) {
return manager_kill_unit(m->manager, m->unit, signo, NULL);
}
+MachineOperation *machine_operation_unref(MachineOperation *o) {
+ if (!o)
+ return NULL;
+
+ sd_event_source_unref(o->event_source);
+
+ safe_close(o->errno_fd);
+
+ if (o->pid > 1)
+ (void) kill(o->pid, SIGKILL);
+
+ sd_bus_message_unref(o->message);
+
+ if (o->machine) {
+ LIST_REMOVE(operations, o->machine->operations, o);
+ o->machine->n_operations--;
+ }
+
+ free(o);
+ return NULL;
+}
+
static const char* const machine_class_table[_MACHINE_CLASS_MAX] = {
[MACHINE_CONTAINER] = "container",
[MACHINE_VM] = "vm"