diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-05-02 21:37:14 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-05-02 21:37:14 +0200 |
| commit | 3a715c7e0d5cbb39ffd6816899ef3050e8331882 (patch) | |
| tree | 0c3b7c11dae457d49126d4e713d1b4ba6ee4e301 | |
| parent | 88ad1ed243572b5310a4e866e87a61e8d8c8969e (diff) | |
Try to start _writer on-demand on macOS (#1739).
| -rw-r--r-- | platform/osx/make_dmg.sh | 17 | ||||
| -rw-r--r-- | src/tools/dcpomatic_disk.cc | 6 | ||||
| -rw-r--r-- | src/tools/dcpomatic_disk_writer.cc | 8 |
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) { |
