diff --git a/lib/shared_memory.cpp b/lib/shared_memory.cpp index 171c18b4..ffb2eed6 100644 --- a/lib/shared_memory.cpp +++ b/lib/shared_memory.cpp @@ -1147,38 +1147,41 @@ namespace IPC { } memset(empty, 0, payLen); } - while (offsetOnPage == -1) { - { - for (char i = 'A'; i <= 'Z'; i++) { - myPage.init(baseName.substr(1) + i, (4096 << (i - 'A')), false, false); - if (!myPage.mapped) { - break; - } - int offset = 0; - while (offset + payLen + (hasCounter ? 1 : 0) <= myPage.len) { + uint32_t attempts = 0; + while (offsetOnPage == -1 && (++attempts) < 20) { + for (char i = 'A'; i <= 'Z'; i++) { + myPage.init(baseName.substr(1) + i, (4096 << (i - 'A')), false, false); + if (!myPage.mapped) { + break; + } + int offset = 0; + while (offset + payLen + (hasCounter ? 1 : 0) <= myPage.len) { + if ((hasCounter && myPage.mapped[offset] == 0) || (!hasCounter && !memcmp(myPage.mapped + offset, empty, payLen))) { + semGuard tmpGuard(&mySemaphore); if ((hasCounter && myPage.mapped[offset] == 0) || (!hasCounter && !memcmp(myPage.mapped + offset, empty, payLen))) { - semGuard tmpGuard(&mySemaphore); - if ((hasCounter && myPage.mapped[offset] == 0) || (!hasCounter && !memcmp(myPage.mapped + offset, empty, payLen))) { - offsetOnPage = offset; - if (hasCounter) { - myPage.mapped[offset] = 1; - *((uint32_t *)(myPage.mapped + 1 + offset + len - 4)) = getpid(); - HIGH_MSG("sharedClient received ID %d", offsetOnPage/(payLen+1)); - } - break; + offsetOnPage = offset; + if (hasCounter) { + myPage.mapped[offset] = 1; + *((uint32_t *)(myPage.mapped + 1 + offset + len - 4)) = getpid(); + HIGH_MSG("sharedClient received ID %d", offsetOnPage/(payLen+1)); } + break; } - offset += payLen + (hasCounter ? 1 : 0); - } - if (offsetOnPage != -1) { - break; } + offset += payLen + (hasCounter ? 1 : 0); + } + if (offsetOnPage != -1) { + break; } } if (offsetOnPage == -1) { Util::wait(500); } } + if (offsetOnPage == -1){ + FAIL_MSG("Could not register on page for %s", baseName.c_str()); + myPage.close(); + } if (empty) { free(empty); } diff --git a/src/input/input.cpp b/src/input/input.cpp index 80ce4cc6..5dfd6195 100644 --- a/src/input/input.cpp +++ b/src/input/input.cpp @@ -542,7 +542,7 @@ namespace Mist { pullLock.post(); pullLock.close(); pullLock.unlink(); - WARN_MSG("No tracks found, cancelling"); + INFO_MSG("No tracks found, cancelling"); return; } nProxy.userClient.countAsViewer = false;