| 1294 | } |
| 1295 | |
| 1296 | static int _dequeue_signal(rt_thread_t thread, lwp_sigset_t *mask, siginfo_t *usi) |
| 1297 | { |
| 1298 | int signo; |
| 1299 | lwp_siginfo_t si; |
| 1300 | struct rt_lwp *lwp; |
| 1301 | lwp_sigset_t *pending; |
| 1302 | lwp_sigqueue_t sigqueue; |
| 1303 | |
| 1304 | lwp = thread->lwp; |
| 1305 | RT_ASSERT(lwp); |
| 1306 | |
| 1307 | sigqueue = _SIGQ(thread); |
| 1308 | pending = &sigqueue->sigset_pending; |
| 1309 | signo = _next_signal(pending, mask); |
| 1310 | if (!signo) |
| 1311 | { |
| 1312 | sigqueue = _SIGQ(lwp); |
| 1313 | pending = &sigqueue->sigset_pending; |
| 1314 | signo = _next_signal(pending, mask); |
| 1315 | } |
| 1316 | |
| 1317 | if (!signo) |
| 1318 | return signo; |
| 1319 | |
| 1320 | si = sigqueue_dequeue(sigqueue, signo); |
| 1321 | RT_ASSERT(!!si); |
| 1322 | |
| 1323 | siginfo_k2u(si, usi); |
| 1324 | siginfo_delete(si); |
| 1325 | |
| 1326 | return signo; |
| 1327 | } |
| 1328 | |
| 1329 | rt_err_t lwp_thread_signal_timedwait(rt_thread_t thread, lwp_sigset_t *sigset, |
| 1330 | siginfo_t *usi, struct timespec *timeout) |
no test coverage detected