| 4214 | } |
| 4215 | |
| 4216 | static void |
| 4217 | sigfastblock_setpend1(struct thread *td) |
| 4218 | { |
| 4219 | int res; |
| 4220 | uint32_t oldval; |
| 4221 | |
| 4222 | if ((td->td_pflags & TDP_SIGFASTPENDING) == 0) |
| 4223 | return; |
| 4224 | res = fueword32((void *)td->td_sigblock_ptr, &oldval); |
| 4225 | if (res == -1) { |
| 4226 | sigfastblock_failed(td, true, false); |
| 4227 | return; |
| 4228 | } |
| 4229 | for (;;) { |
| 4230 | res = casueword32(td->td_sigblock_ptr, oldval, &oldval, |
| 4231 | oldval | SIGFASTBLOCK_PEND); |
| 4232 | if (res == -1) { |
| 4233 | sigfastblock_failed(td, true, true); |
| 4234 | return; |
| 4235 | } |
| 4236 | if (res == 0) { |
| 4237 | td->td_sigblock_val = oldval & ~SIGFASTBLOCK_FLAGS; |
| 4238 | td->td_pflags &= ~TDP_SIGFASTPENDING; |
| 4239 | break; |
| 4240 | } |
| 4241 | MPASS(res == 1); |
| 4242 | if (thread_check_susp(td, false) != 0) |
| 4243 | break; |
| 4244 | } |
| 4245 | } |
| 4246 | |
| 4247 | void |
| 4248 | sigfastblock_setpend(struct thread *td, bool resched) |
no test coverage detected