| 99 | | ULONG dummy; |
| 100 | | APIRET arc = DosOpen(PIPE_CHANGENOTIFY, ¬ifyPipe, &dummy, 0, FILE_OPEN, |
| 101 | | OPEN_ACTION_OPEN_IF_EXISTS, |
| 102 | | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, NULL); |
| 103 | | if (arc == NO_ERROR) { |
| 104 | | // make sure the pipe is non-blocking so that we can get ERROR_NO_DATA |
| 105 | | arc = DosSetNPHState(notifyPipe, NP_NOWAIT); |
| 106 | | Q_ASSERT(arc == NO_ERROR); |
| 107 | | // connect the pipe to the semaphore |
| 108 | | arc = DosCreateEventSem(NULL, &eventSem, |
| | 99 | APIRET arc; |
| | 100 | ULONG dummy, retries = 3; |
| | 101 | |
| | 102 | do { |
| | 103 | arc = DosOpen(PIPE_CHANGENOTIFY, ¬ifyPipe, &dummy, |
| | 104 | 0, FILE_OPEN, OPEN_ACTION_OPEN_IF_EXISTS, |
| | 105 | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY | OPEN_FLAGS_NOINHERIT, NULL); |
| | 106 | if (arc == NO_ERROR) { |
| | 107 | // make sure the pipe is non-blocking so that we can get ERROR_NO_DATA |
| | 108 | arc = DosSetNPHState(notifyPipe, NP_NOWAIT); |
| | 109 | Q_ASSERT(arc == NO_ERROR); |
| | 110 | // connect the pipe to the semaphore |
| | 111 | arc = DosCreateEventSem(NULL, &eventSem, |
| 111 | | Q_ASSERT(arc == NO_ERROR); |
| 112 | | arc = DosSetNPipeSem(notifyPipe, (HSEM)eventSem, 0); |
| 113 | | Q_ASSERT(arc == NO_ERROR); |
| 114 | | } else { |
| 115 | | notifyPipe = NULLHANDLE; // sanity (used by isOk()) |
| 116 | | if (arc != ERROR_FILE_NOT_FOUND && |
| 117 | | arc != ERROR_PATH_NOT_FOUND) |
| 118 | | qWarning("QOS2FileSystemWatcherEngine:: " |
| 119 | | "DosOpen("PIPE_CHANGENOTIFY") returned %lu", arc); |
| 120 | | } |
| | 114 | Q_ASSERT(arc == NO_ERROR); |
| | 115 | arc = DosSetNPipeSem(notifyPipe, (HSEM)eventSem, 0); |
| | 116 | Q_ASSERT(arc == NO_ERROR); |
| | 117 | |
| | 118 | retries = 0; |
| | 119 | } else { |
| | 120 | notifyPipe = NULLHANDLE; // sanity (used by isOk()) |
| | 121 | |
| | 122 | if (arc == ERROR_PIPE_BUSY && --retries) |
| | 123 | DosSleep(100); |
| | 124 | else if (arc != ERROR_FILE_NOT_FOUND && |
| | 125 | arc != ERROR_PATH_NOT_FOUND) |
| | 126 | qWarning("QOS2FileSystemWatcherEngine:: " |
| | 127 | "DosOpen("PIPE_CHANGENOTIFY") returned %lu", arc); |
| | 128 | } |
| | 129 | } while (arc == ERROR_PIPE_BUSY && retries); |