MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / aeProcessCmd

Function aeProcessCmd

src/ae.cpp:139–197  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

137#endif
138
139void 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 }

Callers

nothing calls this directly

Calls 5

aeDeleteFileEventFunction · 0.85
aeCreateFileEventFunction · 0.85
releaseReadMethod · 0.80
acquireReadMethod · 0.80
lockMethod · 0.45

Tested by

no test coverage detected