waiter
static void waiter(struct devlist **blp, struct devlist **badlist);
waiter(&bl, &badlist);
waiter(&bl, &badlist);
waiter(&bl, &badlist);
static int waiter();
errs += waiter(&alist);
errs += waiter(&alist);
struct waiter *w_next, *w_prev;
ctrl_p->waiter);
ctrl_p->waiter++;
ctrl_p->waiter--;
ctrl_p->waiter);
_nscd_logit(me, "number of waiter = %d\n", ctrl_p->waiter);
if (ctrl_p->waiter > 0) {
if (!thread_only && ctrl_p->waiter > 0) {
_nscd_logit(me, "tnumber of waiter = %d\n", ctrl_p->waiter);
int waiter;
WAITER_T waiter;
for (waiter = WAITER_INITIAL;
waiter < WAITER_MAX;
waiter = WAITER_NEXT(waiter)) {
if (waiter == WAITER_INITIAL) {
strerror(errno), waiter);
(void) sleep(waiter);
for (waiter = WAITER_INITIAL;
waiter < WAITER_MAX;
waiter = WAITER_NEXT(waiter)) {
if (waiter == WAITER_INITIAL) {
strerror(errno), waiter);
(void) sleep(waiter);
ns_conn_waiter_t *head = &conn_mt->waiter;
ns_conn_waiter_t *head = &conn_mt->waiter;
ns_conn_waiter_t waiter; /* first of the connection waiters */
hook_wait_setflag(flagwait_t *waiter, uint32_t busyset, fwflag_t wanted,
mutex_enter(&waiter->fw_lock);
if (waiter->fw_flags & FWF_DESTROY) {
cv_signal(&waiter->fw_cv);
mutex_exit(&waiter->fw_lock);
while (waiter->fw_flags & busyset) {
wantedset = ((waiter->fw_flags & wanted) == wanted);
waiter->fw_flags |= wanted;
CVW_EXIT_WRITE(waiter->fw_owner);
cv_wait(&waiter->fw_cv, &waiter->fw_lock);
mutex_exit(&waiter->fw_lock);
CVW_ENTER_WRITE(waiter->fw_owner);
mutex_enter(&waiter->fw_lock);
waiter->fw_flags &= ~wanted;
if (waiter->fw_flags & FWF_DESTROY) {
cv_signal(&waiter->fw_cv);
mutex_exit(&waiter->fw_lock);
waiter->fw_flags &= ~wanted;
ASSERT((waiter->fw_flags & wanted) == 0);
ASSERT((waiter->fw_flags & newflag) == 0);
waiter->fw_flags |= newflag;
mutex_exit(&waiter->fw_lock);
hook_wait_unsetflag(flagwait_t *waiter, fwflag_t oldflag)
mutex_enter(&waiter->fw_lock);
waiter->fw_flags &= ~oldflag;
cv_signal(&waiter->fw_cv);
mutex_exit(&waiter->fw_lock);
hook_wait_destroy(flagwait_t *waiter)
ASSERT((waiter->fw_flags & FWF_DESTROY_WANTED) == 0);
mutex_enter(&waiter->fw_lock);
if (waiter->fw_flags & FWF_DESTROY_WANTED) {
cv_signal(&waiter->fw_cv);
mutex_exit(&waiter->fw_lock);
waiter->fw_flags |= FWF_DESTROY_WANTED;
while (!FWF_DESTROY_OK(waiter)) {
CVW_EXIT_WRITE(waiter->fw_owner);
cv_wait(&waiter->fw_cv, &waiter->fw_lock);
CVW_ENTER_WRITE(waiter->fw_owner);
waiter->fw_flags = FWF_DESTROY_ACTIVE;
cv_signal(&waiter->fw_cv);
mutex_exit(&waiter->fw_lock);
hook_wait_init(flagwait_t *waiter, cvwaitlock_t *owner)
cv_init(&waiter->fw_cv, NULL, CV_DRIVER, NULL);
mutex_init(&waiter->fw_lock, NULL, MUTEX_DRIVER, NULL);
waiter->fw_flags = FWF_NONE;
waiter->fw_owner = owner;
kcondvar_t *waiter = NULL;
pcf8584_take_over(i2c, dip, tp, &waiter, &saved_mode);
pcf8584_give_up(i2c, waiter, saved_mode);
pcf8584_give_up(i2c, waiter, saved_mode);
kcondvar_t **waiter, int *saved_mode)
*waiter = &i2c->pcf8584_icv;
pcf8584_give_up(pcf8584_t *i2c, kcondvar_t *waiter, int saved_mode)
if (waiter)
cv_signal(waiter);
i2c_transfer_t *tp, kcondvar_t **waiter, int *saved_mode);
static void pcf8584_give_up(pcf8584_t *i2c, kcondvar_t *waiter, int saved_mode);
waiter = kmem_zalloc(sizeof (struct sbbc_msg_waiter), KM_NOSLEEP);
if (waiter == (struct sbbc_msg_waiter *)NULL) {
waiter->w_id = 0; /* Until we get an ID from the send */
waiter->w_msg = response;
waiter->w_msg->msg_status = EINPROGRESS;
cv_init(&waiter->w_cv, NULL, CV_DEFAULT, NULL);
cv_destroy(&waiter->w_cv);
kmem_free(waiter, sizeof (struct sbbc_msg_waiter));
waiter->w_id = msg_id;
master_mbox->mbox_wait_list[msg_type] = waiter;
waiter->w_next = NULL;
master_mbox->mbox_wait_list[msg_type] = waiter;
waiter->w_next = tmp;
clockleft = cv_timedwait(&waiter->w_cv, mbox_wait_lock, stop_time);
if (waiter->w_msg->msg_status == EINPROGRESS) {
cv_wait(&waiter->w_cv, mbox_wait_lock);
rc = waiter->w_msg->msg_status = ETIMEDOUT;
cv_destroy(&waiter->w_cv);
kmem_free(waiter, sizeof (struct sbbc_msg_waiter));
struct sbbc_msg_waiter *waiter;
if ((waiter = mbox_find_waiter(type, f_id)) == NULL) {
if ((waiter = mbox_find_waiter(i, f_id))
if (waiter == NULL) {
f, f_id, waiter->w_id,
waiter->w_msg->msg_len);
rc = mbox_read(&header, &frag, waiter->w_msg);
waiter->w_msg->msg_status = (rc == ENOMEM)?
f, waiter->w_msg->msg_status);
cv_signal(&waiter->w_cv);
if (waiter->w_msg->msg_status == ETIMEDOUT) {
cv_signal(&waiter->w_cv);
waiter;
waiter->w_next = NULL;
waiter;
waiter->w_next = tmp;
struct sbbc_msg_waiter *waiter, *prev;
for (waiter = master_mbox->mbox_wait_list[msg_type];
waiter != NULL; waiter = waiter->w_next) {
if (waiter->w_id == msg_id) {
prev->w_next = waiter->w_next;
waiter->w_next;
prev = waiter;
return (waiter);
struct sbbc_msg_waiter *waiter;