version 1.17, 2018/11/07 07:58:16 |
version 1.18, 2019/06/18 11:08:42 |
|
|
log_debug("signal wait channel %s, with waiters", wc->name); |
log_debug("signal wait channel %s, with waiters", wc->name); |
|
|
TAILQ_FOREACH_SAFE(wi, &wc->waiters, entry, wi1) { |
TAILQ_FOREACH_SAFE(wi, &wc->waiters, entry, wi1) { |
wi->item->flags &= ~CMDQ_WAITING; |
cmdq_continue(wi->item); |
|
|
TAILQ_REMOVE(&wc->waiters, wi, entry); |
TAILQ_REMOVE(&wc->waiters, wi, entry); |
free(wi); |
free(wi); |
|
|
} |
} |
|
|
if ((wi = TAILQ_FIRST(&wc->lockers)) != NULL) { |
if ((wi = TAILQ_FIRST(&wc->lockers)) != NULL) { |
wi->item->flags &= ~CMDQ_WAITING; |
cmdq_continue(wi->item); |
TAILQ_REMOVE(&wc->lockers, wi, entry); |
TAILQ_REMOVE(&wc->lockers, wi, entry); |
free(wi); |
free(wi); |
} else { |
} else { |
|
|
|
|
RB_FOREACH_SAFE(wc, wait_channels, &wait_channels, wc1) { |
RB_FOREACH_SAFE(wc, wait_channels, &wait_channels, wc1) { |
TAILQ_FOREACH_SAFE(wi, &wc->waiters, entry, wi1) { |
TAILQ_FOREACH_SAFE(wi, &wc->waiters, entry, wi1) { |
wi->item->flags &= ~CMDQ_WAITING; |
cmdq_continue(wi->item); |
TAILQ_REMOVE(&wc->waiters, wi, entry); |
TAILQ_REMOVE(&wc->waiters, wi, entry); |
free(wi); |
free(wi); |
} |
} |
wc->woken = 1; |
wc->woken = 1; |
TAILQ_FOREACH_SAFE(wi, &wc->lockers, entry, wi1) { |
TAILQ_FOREACH_SAFE(wi, &wc->lockers, entry, wi1) { |
wi->item->flags &= ~CMDQ_WAITING; |
cmdq_continue(wi->item); |
TAILQ_REMOVE(&wc->lockers, wi, entry); |
TAILQ_REMOVE(&wc->lockers, wi, entry); |
free(wi); |
free(wi); |
} |
} |