Lines Matching refs:zevtchan

6033 do_callback(struct znotify *zevtchan, sysevent_t *ev)  in do_callback()  argument
6048 zevtchan->zn_failure_count++; in do_callback()
6063 ret = zevtchan->zn_callback(zonename, zid, newstate, in do_callback()
6064 oldstate, when, zevtchan->zn_private); in do_callback()
6067 zevtchan->zn_failure_count = 0; in do_callback()
6074 zevtchan->zn_failure_count = 0; in do_callback()
6082 struct znotify *zevtchan = p; in zn_cb() local
6085 (void) pthread_mutex_lock(&(zevtchan->zn_mutex)); in zn_cb()
6088 (void) pthread_mutex_unlock((&zevtchan->zn_mutex)); in zn_cb()
6092 if (zevtchan->zn_state == ZN_LOCKED) { in zn_cb()
6094 zevtchan->zn_failed = B_TRUE; in zn_cb()
6095 (void) pthread_mutex_unlock(&(zevtchan->zn_mutex)); in zn_cb()
6099 if (zevtchan->zn_state == ZN_PING_INFLIGHT) { in zn_cb()
6101 zevtchan->zn_state = ZN_PING_RECEIVED; in zn_cb()
6102 (void) pthread_cond_signal(&(zevtchan->zn_cond)); in zn_cb()
6103 (void) pthread_mutex_unlock(&(zevtchan->zn_mutex)); in zn_cb()
6106 zevtchan->zn_failed = B_TRUE; in zn_cb()
6107 (void) pthread_mutex_unlock(&(zevtchan->zn_mutex)); in zn_cb()
6112 if (zevtchan->zn_state == ZN_UNLOCKED) { in zn_cb()
6114 error = do_callback(zevtchan, ev); in zn_cb()
6115 (void) pthread_mutex_unlock(&(zevtchan->zn_mutex)); in zn_cb()
6127 if (zevtchan->zn_failure_count > ZONE_CB_RETRY_COUNT) { in zn_cb()
6130 (void) sleep(zevtchan->zn_failure_count); in zn_cb()
6135 if (zevtchan->zn_state == ZN_PING_RECEIVED) { in zn_cb()
6136 (void) pthread_mutex_unlock(&(zevtchan->zn_mutex)); in zn_cb()
6147 struct znotify *zevtchan = h; in zonecfg_notify_critical_enter() local
6149 (void) pthread_mutex_lock(&(zevtchan->zn_bigmutex)); in zonecfg_notify_critical_enter()
6150 zevtchan->zn_state = ZN_LOCKED; in zonecfg_notify_critical_enter()
6157 struct znotify *zevtchan = h; in zonecfg_notify_critical_exit() local
6159 if (zevtchan->zn_state == ZN_UNLOCKED) in zonecfg_notify_critical_exit()
6162 (void) pthread_mutex_lock(&(zevtchan->zn_mutex)); in zonecfg_notify_critical_exit()
6163 zevtchan->zn_state = ZN_PING_INFLIGHT; in zonecfg_notify_critical_exit()
6165 (void) sysevent_evc_publish(zevtchan->zn_eventchan, in zonecfg_notify_critical_exit()
6168 zevtchan->zn_subscriber_id, NULL, EVCH_SLEEP); in zonecfg_notify_critical_exit()
6170 while (zevtchan->zn_state != ZN_PING_RECEIVED) { in zonecfg_notify_critical_exit()
6171 (void) pthread_cond_wait(&(zevtchan->zn_cond), in zonecfg_notify_critical_exit()
6172 &(zevtchan->zn_mutex)); in zonecfg_notify_critical_exit()
6175 if (zevtchan->zn_failed == B_TRUE) { in zonecfg_notify_critical_exit()
6176 zevtchan->zn_state = ZN_LOCKED; in zonecfg_notify_critical_exit()
6177 zevtchan->zn_failed = B_FALSE; in zonecfg_notify_critical_exit()
6178 (void) pthread_mutex_unlock(&(zevtchan->zn_mutex)); in zonecfg_notify_critical_exit()
6182 zevtchan->zn_state = ZN_UNLOCKED; in zonecfg_notify_critical_exit()
6183 (void) pthread_mutex_unlock(&(zevtchan->zn_mutex)); in zonecfg_notify_critical_exit()
6184 (void) pthread_mutex_unlock(&(zevtchan->zn_bigmutex)); in zonecfg_notify_critical_exit()
6191 struct znotify *zevtchan = h; in zonecfg_notify_critical_abort() local
6193 zevtchan->zn_state = ZN_UNLOCKED; in zonecfg_notify_critical_abort()
6194 zevtchan->zn_failed = B_FALSE; in zonecfg_notify_critical_abort()
6199 (void) pthread_mutex_unlock(&(zevtchan->zn_bigmutex)); in zonecfg_notify_critical_abort()
6207 struct znotify *zevtchan; in zonecfg_notify_bind() local
6211 zevtchan = malloc(sizeof (struct znotify)); in zonecfg_notify_bind()
6213 if (zevtchan == NULL) in zonecfg_notify_bind()
6216 zevtchan->zn_private = p; in zonecfg_notify_bind()
6217 zevtchan->zn_callback = func; in zonecfg_notify_bind()
6218 zevtchan->zn_state = ZN_UNLOCKED; in zonecfg_notify_bind()
6219 zevtchan->zn_failed = B_FALSE; in zonecfg_notify_bind()
6221 if (pthread_mutex_init(&(zevtchan->zn_mutex), NULL)) in zonecfg_notify_bind()
6223 if (pthread_cond_init(&(zevtchan->zn_cond), NULL)) { in zonecfg_notify_bind()
6224 (void) pthread_mutex_destroy(&(zevtchan->zn_mutex)); in zonecfg_notify_bind()
6227 if (pthread_mutex_init(&(zevtchan->zn_bigmutex), NULL)) { in zonecfg_notify_bind()
6228 (void) pthread_mutex_destroy(&(zevtchan->zn_mutex)); in zonecfg_notify_bind()
6229 (void) pthread_cond_destroy(&(zevtchan->zn_cond)); in zonecfg_notify_bind()
6233 if (sysevent_evc_bind(ZONE_EVENT_CHANNEL, &(zevtchan->zn_eventchan), in zonecfg_notify_bind()
6245 (void) sprintf(zevtchan->zn_subscriber_id, "zone_%li_%i", in zonecfg_notify_bind()
6248 r = sysevent_evc_subscribe(zevtchan->zn_eventchan, in zonecfg_notify_bind()
6249 zevtchan->zn_subscriber_id, ZONE_EVENT_STATUS_CLASS, zn_cb, in zonecfg_notify_bind()
6250 zevtchan, 0); in zonecfg_notify_bind()
6256 return (zevtchan); in zonecfg_notify_bind()
6258 (void) sysevent_evc_unbind(zevtchan->zn_eventchan); in zonecfg_notify_bind()
6260 (void) pthread_mutex_destroy(&zevtchan->zn_mutex); in zonecfg_notify_bind()
6261 (void) pthread_cond_destroy(&zevtchan->zn_cond); in zonecfg_notify_bind()
6262 (void) pthread_mutex_destroy(&(zevtchan->zn_bigmutex)); in zonecfg_notify_bind()
6264 free(zevtchan); in zonecfg_notify_bind()