summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-05-02 21:37:14 +0200
committerCarl Hetherington <cth@carlh.net>2020-05-02 21:37:14 +0200
commit3a715c7e0d5cbb39ffd6816899ef3050e8331882 (patch)
tree0c3b7c11dae457d49126d4e713d1b4ba6ee4e301 /src
parent88ad1ed243572b5310a4e866e87a61e8d8c8969e (diff)
Try to start _writer on-demand on macOS (#1739).
Diffstat (limited to 'src')
-rw-r--r--src/tools/dcpomatic_disk.cc6
-rw-r--r--src/tools/dcpomatic_disk_writer.cc8
2 files changed, 13 insertions, 1 deletions
diff --git a/src/tools/dcpomatic_disk.cc b/src/tools/dcpomatic_disk.cc
index 6f72bfed0..b2678ce42 100644
--- a/src/tools/dcpomatic_disk.cc
+++ b/src/tools/dcpomatic_disk.cc
@@ -42,6 +42,7 @@
#endif
#ifdef DCPOMATIC_OSX
#include <ApplicationServices/ApplicationServices.h>
+#include <notify.h>
#endif
using std::string;
@@ -132,7 +133,10 @@ public:
_writer = new boost::process::child (disk_writer_path());
#endif
- /* _writer is always running on macOS at the moment */
+#ifdef DCPOMATIC_OSX
+ LOG_DISK_NC("Sending notification to writer daemon");
+ notify_post ("com.dcpomatic.disk.writer.start");
+#endif
}
~DOMFrame ()
diff --git a/src/tools/dcpomatic_disk_writer.cc b/src/tools/dcpomatic_disk_writer.cc
index 66f347943..d5599f25b 100644
--- a/src/tools/dcpomatic_disk_writer.cc
+++ b/src/tools/dcpomatic_disk_writer.cc
@@ -48,6 +48,7 @@ extern "C" {
extern "C" {
#include <lwext4/file_dev.h>
}
+#include <xpc/xpc.h>
#endif
#ifdef DCPOMATIC_LINUX
@@ -520,6 +521,13 @@ main ()
LOG_DISK_NC("dcpomatic_disk_writer started");
#endif
+#ifdef DCPOMATIC_OSX
+ /* I *think* this confumes the notifyd event that we used to start the process, so we only
+ * get started once per notification.
+ */
+ xpc_set_event_stream_handler("com.apple.notifyd.matching", DISPATCH_TARGET_QUEUE_DEFAULT, ^(xpc_object_t event) {});
+#endif
+
try {
nanomsg = new Nanomsg (false);
} catch (runtime_error& e) {