image manager: add inotify watch
Add an inotify watch to the known software image location.
Hook the inotify fd with sd-event, so that on callback, version d-bus
objects can be created based on the newly added software image.
Resolves openbmc/openbmc#1444.
Change-Id: I5c460f820c8d3a851b8ddc969f26d38870c36991
Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
diff --git a/image_manager_main.cpp b/image_manager_main.cpp
index bd41b63..66f31f6 100644
--- a/image_manager_main.cpp
+++ b/image_manager_main.cpp
@@ -1,27 +1,38 @@
-#include <iostream>
#include <cstdlib>
#include <exception>
#include <sdbusplus/bus.hpp>
+#include <phosphor-logging/log.hpp>
#include "config.h"
#include "version_software_manager.hpp"
+#include "watch.hpp"
int main(int argc, char* argv[])
{
auto bus = sdbusplus::bus::new_default();
- // Add sdbusplus ObjectManager.
+ sd_event* loop = nullptr;
+ sd_event_default(&loop);
+
sdbusplus::server::manager::manager objManager(bus,
SOFTWARE_OBJPATH);
-
phosphor::software::manager::Version manager(bus,
SOFTWARE_OBJPATH);
-
bus.request_name(VERSION_BUSNAME);
- while (true)
+ try
{
- bus.process_discard();
- bus.wait();
+ phosphor::software::manager::Watch watch(loop);
+ bus.attach_event(loop, SD_EVENT_PRIORITY_NORMAL);
+ sd_event_loop(loop);
}
+ catch (std::exception& e)
+ {
+ using namespace phosphor::logging;
+ log<level::ERR>(e.what());
+ return -1;
+ }
+
+ sd_event_unref(loop);
+
return 0;
}