summaryrefslogtreecommitdiff
path: root/src/resources.cpp
blob: a501bba5a22f944c09f723c25152d331700d2b3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "resources.hpp"

#include "interfaces/mount_point_state_machine.hpp"

namespace resource
{

Process::~Process()
{
    if (spawned)
    {
        process->stop([& machine = *machine] {
            boost::asio::post(machine.getIoc(), [&machine]() {
                machine.emitSubprocessStoppedEvent();
            });
        });
    }
}

Gadget::Gadget(interfaces::MountPointStateMachine& machine,
               StateChange devState) :
    machine(&machine)
{
    status = UsbGadget::configure(
        std::string(machine.getName()), machine.getConfig().nbdDevice, devState,
        machine.getTarget() ? machine.getTarget()->rw : false);
}

Gadget::~Gadget()
{
    int32_t ret = UsbGadget::configure(std::string(machine->getName()),
                                       machine->getConfig().nbdDevice,
                                       StateChange::removed);
    if (ret != 0)
    {
        // This shouldn't ever happen, perhaps best is to restart
        // app
        LogMsg(Logger::Critical, machine->getName(),
               " Some serious failure happened!");

        boost::asio::post(machine->getIoc(), [& machine = *machine]() {
            machine.emitUdevStateChangeEvent(machine.getConfig().nbdDevice,
                                             StateChange::unknown);
        });
    }
}

} // namespace resource