summaryrefslogtreecommitdiff
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
parent88ad1ed243572b5310a4e866e87a61e8d8c8969e (diff)
Try to start _writer on-demand on macOS (#1739).
-rw-r--r--platform/osx/make_dmg.sh17
-rw-r--r--src/tools/dcpomatic_disk.cc6
-rw-r--r--src/tools/dcpomatic_disk_writer.cc8
3 files changed, 24 insertions, 7 deletions
diff --git a/platform/osx/make_dmg.sh b/platform/osx/make_dmg.sh
index b4a4488df..1cff3b5bb 100644
--- a/platform/osx/make_dmg.sh
+++ b/platform/osx/make_dmg.sh
@@ -537,16 +537,21 @@ cat > $pkgroot/Library/LaunchDaemons/com.dcpomatic.disk.writer.plist <<EOF
<key>DYLD_LIBRARY_PATH</key>
<string><![CDATA[/Library/Application Support/com.dcpomatic]]></string>
</dict>
- <key>KeepAlive</key>
- <true/>
- <key>RunAtLoad</key>
- <true/>
- <key>Debug</key>
- <true/>
<key>StandardOutPath</key>
<string>/var/log/dcpomatic_disk_writer_out.log</string>
<key>StandardErrorPath</key>
<string>/var/log/dcpomatic_disk_writer_err.log</string>
+ <key>LaunchEvents</key>
+ <dict>
+ <key>com.apple.notifyd.matching</key>
+ <dict>
+ <key>com.dcpomatic.disk.writer.start</key>
+ <dict>
+ <key>Notification</key>
+ <string>com.dcpomatic.disk.writer.start</string>
+ </dict>
+ </dict>
+ </dict>
</dict>
</plist>
EOF
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) {