diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-02-17 19:22:03 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-02-17 19:22:36 +0100 |
commit | 0370612e0522191f929e3feb7d4937fff3d421e2 (patch) | |
tree | d991bb0f0039c499229da7b48f8e232b8fceec7b /src/machine/machine.c | |
parent | c7abe32be167ded048a5bb8a912faf2e745b20cb (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.c | 25 |
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" |