| 137 | #endif |
| 138 | |
| 139 | void aeProcessCmd(aeEventLoop *eventLoop, int fd, void *, int ) |
| 140 | { |
| 141 | std::unique_lock<decltype(g_lock)> ulock(g_lock, std::defer_lock); |
| 142 | aeCommand cmd; |
| 143 | for (;;) |
| 144 | { |
| 145 | auto cb = read(fd, &cmd, sizeof(aeCommand)); |
| 146 | if (cb != sizeof(cmd)) |
| 147 | { |
| 148 | serverAssert(errno == EAGAIN); |
| 149 | break; |
| 150 | } |
| 151 | switch (cmd.op) |
| 152 | { |
| 153 | case AE_ASYNC_OP::DeleteFileEvent: |
| 154 | aeDeleteFileEvent(eventLoop, cmd.fd, cmd.mask); |
| 155 | break; |
| 156 | |
| 157 | case AE_ASYNC_OP::CreateFileEvent: |
| 158 | aeCreateFileEvent(eventLoop, cmd.fd, cmd.mask, cmd.fproc, cmd.clientData); |
| 159 | break; |
| 160 | |
| 161 | case AE_ASYNC_OP::PostFunction: |
| 162 | { |
| 163 | if (cmd.fLock && !ulock.owns_lock()) { |
| 164 | g_forkLock.releaseRead(); |
| 165 | ulock.lock(); |
| 166 | g_forkLock.acquireRead(); |
| 167 | } |
| 168 | ((aePostFunctionProc*)cmd.proc)(cmd.clientData); |
| 169 | break; |
| 170 | } |
| 171 | |
| 172 | case AE_ASYNC_OP::PostCppFunction: |
| 173 | { |
| 174 | if (cmd.fLock && !ulock.owns_lock()) { |
| 175 | g_forkLock.releaseRead(); |
| 176 | ulock.lock(); |
| 177 | g_forkLock.acquireRead(); |
| 178 | } |
| 179 | (*cmd.pfn)(); |
| 180 | |
| 181 | delete cmd.pfn; |
| 182 | break; |
| 183 | } |
| 184 | case AE_ASYNC_OP::PostAsynDBFunction: |
| 185 | { //added to support async api IStorage |
| 186 | if (cmd.fLock && !ulock.owns_lock()) { |
| 187 | g_forkLock.releaseRead(); |
| 188 | ulock.lock(); |
| 189 | g_forkLock.acquireRead(); |
| 190 | } |
| 191 | ((aePostFunctionTokenProc*)cmd.tproc)(eventLoop,(StorageToken*)cmd.clientData); |
| 192 | break; |
| 193 | } |
| 194 | break; |
| 195 | } |
| 196 | } |
nothing calls this directly
no test coverage detected