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); |