summaryrefslogtreecommitdiff
path: root/src/tools
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-05-09 16:43:24 +0200
committerCarl Hetherington <cth@carlh.net>2021-05-09 23:15:05 +0200
commit472959c1357f43e2eb33366c58bed0466474c2b7 (patch)
treeb4cb1bd7b430107c79cded98c880a8daec96b77e /src/tools
parent33b14b1c003a19020b3c5f12e639d91140f1388d (diff)
Attempt ping from front- to back-end several times (#1990).v2.15.145
On macOS it seems that the backend sometimes is not started very quickly. Adding a long timeout to ping does not work, perhaps because the backend is not listening. Trying a few times seems to fix it. With this fix I saw this log: Sun May 9 23:02:51 2021: dcpomatic_disk_writer e63a485e23 started Sun May 9 23:02:51 2021: Entering main loop Sun May 9 23:02:51 2021: Writer receives command: P from the backend and Sun May 9 23:02:45 2021: Could not send ping to writer (attempt 1) Sun May 9 23:02:47 2021: Could not send ping to writer (attempt 2) Sun May 9 23:02:49 2021: Could not send ping to writer (attempt 3) from the front-end, suggesting that the first 3 pings went to /dev/null and the 4th was heard.
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/dcpomatic_disk.cc33
1 files changed, 21 insertions, 12 deletions
diff --git a/src/tools/dcpomatic_disk.cc b/src/tools/dcpomatic_disk.cc
index 0a53a0a9b..3daffb72d 100644
--- a/src/tools/dcpomatic_disk.cc
+++ b/src/tools/dcpomatic_disk.cc
@@ -249,18 +249,27 @@ private:
DCPOMATIC_ASSERT (_drive->GetSelection() != wxNOT_FOUND);
DCPOMATIC_ASSERT (static_cast<bool>(_dcp_path));
- bool have_writer = true;
- if (!_nanomsg.send(DISK_WRITER_PING "\n", 2000)) {
- LOG_DISK_NC("Could not send ping to writer");
- have_writer = false;
- } else {
- auto reply = _nanomsg.receive (2000);
- if (!reply) {
- LOG_DISK_NC("No reply received from ping");
- have_writer = false;
- } else if (*reply != DISK_WRITER_PONG) {
- LOG_DISK_NC("Unexpected response to ping received");
- have_writer = false;
+ auto ping = [this](int attempt) {
+ if (_nanomsg.send(DISK_WRITER_PING "\n", 2000)) {
+ auto reply = _nanomsg.receive (2000);
+ if (reply && *reply == DISK_WRITER_PONG) {
+ return true;
+ } else if (reply) {
+ LOG_DISK("Unexpected response %1 to ping received (attempt %2)", *reply, attempt);
+ } else {
+ LOG_DISK("No reply received from ping (attempt %1)", attempt);
+ }
+ } else {
+ LOG_DISK("Could not send ping to writer (attempt %1)", attempt);
+ }
+ return false;
+ };
+
+ bool have_writer = false;
+ for (int i = 0; i < 8; ++i) {
+ if (ping(i + 1)) {
+ have_writer = true;
+ break;
}
}