diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-05-09 16:43:24 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-05-09 23:15:05 +0200 |
| commit | 472959c1357f43e2eb33366c58bed0466474c2b7 (patch) | |
| tree | b4cb1bd7b430107c79cded98c880a8daec96b77e /src | |
| parent | 33b14b1c003a19020b3c5f12e639d91140f1388d (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')
| -rw-r--r-- | src/tools/dcpomatic_disk.cc | 33 |
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; } } |
