Lines Matching refs:inst
151 reset_start_times(restarter_inst_t *inst) in reset_start_times() argument
153 inst->ri_start_index = 0; in reset_start_times()
154 bzero(inst->ri_start_time, sizeof (inst->ri_start_time)); in reset_start_times()
187 restarter_inst_t *inst; in inst_lookup_by_id() local
190 inst = uu_list_find(instance_list.ril_instance_list, &id, NULL, NULL); in inst_lookup_by_id()
191 if (inst != NULL) in inst_lookup_by_id()
192 MUTEX_LOCK(&inst->ri_lock); in inst_lookup_by_id()
195 if (inst != NULL) { in inst_lookup_by_id()
196 while (inst->ri_method_thread != 0 && in inst_lookup_by_id()
197 !pthread_equal(inst->ri_method_thread, pthread_self())) { in inst_lookup_by_id()
198 ++inst->ri_method_waiters; in inst_lookup_by_id()
199 (void) pthread_cond_wait(&inst->ri_method_cv, in inst_lookup_by_id()
200 &inst->ri_lock); in inst_lookup_by_id()
201 assert(inst->ri_method_waiters > 0); in inst_lookup_by_id()
202 --inst->ri_method_waiters; in inst_lookup_by_id()
206 return (inst); in inst_lookup_by_id()
213 restarter_inst_t *inst; in inst_lookup_queue() local
220 inst = uu_list_find(instance_list.ril_instance_list, &id, NULL, NULL); in inst_lookup_queue()
221 if (inst != NULL) in inst_lookup_queue()
222 MUTEX_LOCK(&inst->ri_queue_lock); in inst_lookup_queue()
225 return (inst); in inst_lookup_queue()
249 check_contract(restarter_inst_t *inst, boolean_t primary, in check_contract() argument
255 ctidp = primary ? &inst->ri_i.i_primary_ctid : in check_contract()
256 &inst->ri_i.i_transient_ctid; in check_contract()
290 "for %s from repository.\n", *ctidp, inst->ri_i.i_fmri); in check_contract()
317 restarter_inst_t *inst; in restarter_insert_inst() local
340 inst = uu_list_find(instance_list.ril_instance_list, &id, NULL, in restarter_insert_inst()
342 if (inst != NULL) { in restarter_insert_inst()
349 inst = startd_zalloc(sizeof (restarter_inst_t)); in restarter_insert_inst()
350 inst->ri_utmpx_prefix = startd_alloc(max_scf_value_size); in restarter_insert_inst()
351 inst->ri_utmpx_prefix[0] = '\0'; in restarter_insert_inst()
353 inst->ri_i.i_fmri = startd_alloc(strlen(name) + 1); in restarter_insert_inst()
354 (void) strcpy((char *)inst->ri_i.i_fmri, name); in restarter_insert_inst()
356 inst->ri_queue = startd_list_create(restarter_queue_pool, inst, 0); in restarter_insert_inst()
362 inst->ri_id = (id != -1 ? id : dict_insert(name)); in restarter_insert_inst()
364 special_online_hooks_get(name, &inst->ri_pre_online_hook, in restarter_insert_inst()
365 &inst->ri_post_online_hook, &inst->ri_post_offline_hook); in restarter_insert_inst()
376 if (inst->ri_logstem != NULL) in restarter_insert_inst()
377 startd_free(inst->ri_logstem, PATH_MAX); in restarter_insert_inst()
378 if (inst->ri_common_name != NULL) in restarter_insert_inst()
379 free(inst->ri_common_name); in restarter_insert_inst()
380 if (inst->ri_C_common_name != NULL) in restarter_insert_inst()
381 free(inst->ri_C_common_name); in restarter_insert_inst()
383 inst->ri_logstem = NULL; in restarter_insert_inst()
384 inst->ri_common_name = NULL; in restarter_insert_inst()
385 inst->ri_C_common_name = NULL; in restarter_insert_inst()
432 inst->ri_logstem = startd_alloc(PATH_MAX); in restarter_insert_inst()
433 (void) snprintf(inst->ri_logstem, PATH_MAX, "%s%s", logfilebuf, in restarter_insert_inst()
494 inst->ri_i.i_state = ps->ps_state = state; in restarter_insert_inst()
495 inst->ri_i.i_next_state = ps->ps_state_next = in restarter_insert_inst()
499 graph_protocol_send_event(inst->ri_i.i_fmri, in restarter_insert_inst()
507 switch (libscf_get_startd_properties(scf_inst, snap, &inst->ri_flags, in restarter_insert_inst()
508 &inst->ri_utmpx_prefix)) { in restarter_insert_inst()
527 inst->ri_flags = RINST_CONTRACT; in restarter_insert_inst()
536 &inst->ri_common_name, &inst->ri_C_common_name); in restarter_insert_inst()
541 if (inst->ri_common_name != NULL) { in restarter_insert_inst()
542 char *tmp = safe_strdup(inst->ri_common_name); in restarter_insert_inst()
543 startd_free(inst->ri_common_name, max_scf_value_size); in restarter_insert_inst()
544 inst->ri_common_name = tmp; in restarter_insert_inst()
547 if (inst->ri_C_common_name != NULL) { in restarter_insert_inst()
548 char *tmp = safe_strdup(inst->ri_C_common_name); in restarter_insert_inst()
549 startd_free(inst->ri_C_common_name, max_scf_value_size); in restarter_insert_inst()
550 inst->ri_C_common_name = tmp; in restarter_insert_inst()
573 switch (libscf_read_method_ids(h, scf_inst, inst->ri_i.i_fmri, in restarter_insert_inst()
574 &inst->ri_i.i_primary_ctid, &inst->ri_i.i_transient_ctid, in restarter_insert_inst()
591 if (inst->ri_i.i_primary_ctid >= 1) { in restarter_insert_inst()
592 contract_hash_store(inst->ri_i.i_primary_ctid, inst->ri_id); in restarter_insert_inst()
594 switch (check_contract(inst, B_TRUE, scf_inst)) { in restarter_insert_inst()
611 if (inst->ri_i.i_transient_ctid >= 1) { in restarter_insert_inst()
612 switch (check_contract(inst, B_FALSE, scf_inst)) { in restarter_insert_inst()
630 (void) pthread_mutex_init(&inst->ri_lock, &mutex_attrs); in restarter_insert_inst()
631 (void) pthread_mutex_init(&inst->ri_queue_lock, &mutex_attrs); in restarter_insert_inst()
632 MUTEX_LOCK(&inst->ri_lock); in restarter_insert_inst()
633 MUTEX_LOCK(&inst->ri_queue_lock); in restarter_insert_inst()
635 (void) pthread_cond_init(&inst->ri_method_cv, NULL); in restarter_insert_inst()
637 uu_list_node_init(inst, &inst->ri_link, restarter_instance_pool); in restarter_insert_inst()
638 uu_list_insert(instance_list.ril_instance_list, inst, idx); in restarter_insert_inst()
642 (inst->ri_flags & RINST_STYLE_MASK) == RINST_WAIT) { in restarter_insert_inst()
644 ret = wait_register(start_pid, inst->ri_i.i_fmri, 0, 1); in restarter_insert_inst()
654 inst->ri_i.i_fmri, start_pid); in restarter_insert_inst()
659 (void) stop_instance(h, inst, RSTOP_EXIT); in restarter_insert_inst()
667 (void) restarter_instance_update_states(h, inst, state, in restarter_insert_inst()
671 service_style(inst->ri_flags)); in restarter_insert_inst()
673 MUTEX_UNLOCK(&inst->ri_queue_lock); in restarter_insert_inst()
674 MUTEX_UNLOCK(&inst->ri_lock); in restarter_insert_inst()
696 startd_free((void *)inst->ri_i.i_fmri, strlen(inst->ri_i.i_fmri) + 1); in restarter_insert_inst()
697 uu_list_destroy(inst->ri_queue); in restarter_insert_inst()
698 if (inst->ri_logstem != NULL) in restarter_insert_inst()
699 startd_free(inst->ri_logstem, PATH_MAX); in restarter_insert_inst()
700 if (inst->ri_common_name != NULL) in restarter_insert_inst()
701 free(inst->ri_common_name); in restarter_insert_inst()
702 if (inst->ri_C_common_name != NULL) in restarter_insert_inst()
703 free(inst->ri_C_common_name); in restarter_insert_inst()
704 startd_free(inst->ri_utmpx_prefix, max_scf_value_size); in restarter_insert_inst()
705 startd_free(inst, sizeof (restarter_inst_t)); in restarter_insert_inst()
778 instance_is_wait_style(restarter_inst_t *inst) in instance_is_wait_style() argument
780 assert(MUTEX_HELD(&inst->ri_lock)); in instance_is_wait_style()
781 return ((inst->ri_flags & RINST_STYLE_MASK) == RINST_WAIT); in instance_is_wait_style()
790 instance_is_transient_style(restarter_inst_t *inst) in instance_is_transient_style() argument
792 assert(MUTEX_HELD(&inst->ri_lock)); in instance_is_transient_style()
793 return ((inst->ri_flags & RINST_STYLE_MASK) == RINST_TRANSIENT); in instance_is_transient_style()
801 instance_in_transition(restarter_inst_t *inst) in instance_in_transition() argument
803 assert(MUTEX_HELD(&inst->ri_lock)); in instance_in_transition()
804 if (inst->ri_i.i_next_state == RESTARTER_STATE_NONE) in instance_in_transition()
813 instance_started(restarter_inst_t *inst) in instance_started() argument
817 assert(MUTEX_HELD(&inst->ri_lock)); in instance_started()
819 if (inst->ri_i.i_state == RESTARTER_STATE_ONLINE || in instance_started()
820 inst->ri_i.i_state == RESTARTER_STATE_DEGRADED) in instance_started()
912 restarter_inst_t *inst; in restarter_mark_pending_snapshot() local
916 inst = inst_lookup_by_name(fmri); in restarter_mark_pending_snapshot()
917 if (inst == NULL) in restarter_mark_pending_snapshot()
920 inst->ri_flags |= flag; in restarter_mark_pending_snapshot()
922 MUTEX_UNLOCK(&inst->ri_lock); in restarter_mark_pending_snapshot()
928 restarter_inst_t *inst; in restarter_take_pending_snapshots() local
933 for (inst = uu_list_first(instance_list.ril_instance_list); in restarter_take_pending_snapshots()
934 inst != NULL; in restarter_take_pending_snapshots()
935 inst = uu_list_next(instance_list.ril_instance_list, inst)) { in restarter_take_pending_snapshots()
939 MUTEX_LOCK(&inst->ri_lock); in restarter_take_pending_snapshots()
949 fmri = inst->ri_i.i_fmri; in restarter_take_pending_snapshots()
951 if (inst->ri_flags & RINST_RETAKE_RUNNING) { in restarter_take_pending_snapshots()
962 inst->ri_flags &= ~RINST_RETAKE_RUNNING; in restarter_take_pending_snapshots()
967 if (inst->ri_flags & RINST_RETAKE_START) { in restarter_take_pending_snapshots()
972 inst->ri_flags &= ~RINST_RETAKE_START; in restarter_take_pending_snapshots()
984 MUTEX_UNLOCK(&inst->ri_lock); in restarter_take_pending_snapshots()
1027 stop_instance(scf_handle_t *local_handle, restarter_inst_t *inst, in stop_instance() argument
1037 assert(MUTEX_HELD(&inst->ri_lock)); in stop_instance()
1038 assert(inst->ri_method_thread == 0); in stop_instance()
1095 if (inst->ri_i.i_state == RESTARTER_STATE_MAINT || in stop_instance()
1096 inst->ri_i.i_state == RESTARTER_STATE_DISABLED) { in stop_instance()
1099 inst->ri_i.i_fmri); in stop_instance()
1104 if (instance_started(inst) == 0) { in stop_instance()
1106 inst->ri_i.i_fmri); in stop_instance()
1110 if (instance_in_transition(inst)) { in stop_instance()
1114 inst->ri_i.i_fmri); in stop_instance()
1118 log_instance(inst, B_TRUE, "Stopping because %s.", cp); in stop_instance()
1121 "%s: Instance stopping because %s.\n", inst->ri_i.i_fmri, cp); in stop_instance()
1123 if (instance_is_wait_style(inst) && in stop_instance()
1132 inst, inst->ri_i.i_state, RESTARTER_STATE_OFFLINE, re, in stop_instance()
1152 (void) update_fault_count(inst, FAULT_COUNT_INCR); in stop_instance()
1153 if (method_rate_critical(inst)) { in stop_instance()
1154 log_instance(inst, B_TRUE, "Failing too " in stop_instance()
1159 (void) update_fault_count(inst, FAULT_COUNT_RESET); in stop_instance()
1160 reset_start_times(inst); in stop_instance()
1163 if (inst->ri_i.i_primary_ctid != 0) { in stop_instance()
1164 inst->ri_m_inst = in stop_instance()
1166 inst->ri_mi_deleted = B_FALSE; in stop_instance()
1168 libscf_reget_instance(inst); in stop_instance()
1169 method_remove_contract(inst, B_TRUE, B_TRUE); in stop_instance()
1171 scf_instance_destroy(inst->ri_m_inst); in stop_instance()
1172 inst->ri_m_inst = NULL; in stop_instance()
1176 inst, inst->ri_i.i_next_state, RESTARTER_STATE_NONE, re, in stop_instance()
1188 } else if (instance_is_wait_style(inst) && re == RERR_RESTART) { in stop_instance()
1196 wait_ignore_by_fmri(inst->ri_i.i_fmri); in stop_instance()
1211 new_state = inst->ri_i.i_enabled ? in stop_instance()
1214 switch (err = restarter_instance_update_states(local_handle, inst, in stop_instance()
1215 inst->ri_i.i_state, new_state, RERR_NONE, reason)) { in stop_instance()
1226 info->sf_id = inst->ri_id; in stop_instance()
1230 inst->ri_method_thread = startd_thread_create(method_thread, info); in stop_instance()
1264 scf_instance_t *inst; in unmaintain_instance() local
1316 switch (r = libscf_fmri_get_instance(h, rip->ri_i.i_fmri, &inst)) { in unmaintain_instance()
1335 r = restarter_remove_contract(inst, ctid, RESTARTER_CONTRACT_PRIMARY); in unmaintain_instance()
1352 scf_instance_destroy(inst); in unmaintain_instance()
1373 scf_instance_destroy(inst); in unmaintain_instance()
1388 enable_inst(scf_handle_t *h, restarter_inst_t *inst, in enable_inst() argument
1396 assert(MUTEX_HELD(&inst->ri_lock)); in enable_inst()
1400 assert(instance_in_transition(inst) == 0); in enable_inst()
1402 state = inst->ri_i.i_state; in enable_inst()
1405 inst->ri_i.i_enabled = 1; in enable_inst()
1414 log_instance(inst, B_FALSE, "Enabled."); in enable_inst()
1416 inst->ri_i.i_fmri); in enable_inst()
1427 (void) restarter_instance_update_states(h, inst, in enable_inst()
1433 inst->ri_i.i_fmri); in enable_inst()
1436 inst->ri_i.i_enabled = 0; in enable_inst()
1441 r = stop_instance(h, inst, RSTOP_DISABLE); in enable_inst()
1446 if (inst->ri_i.i_primary_ctid != 0) { in enable_inst()
1447 inst->ri_m_inst = safe_scf_instance_create(h); in enable_inst()
1448 inst->ri_mi_deleted = B_FALSE; in enable_inst()
1450 libscf_reget_instance(inst); in enable_inst()
1451 method_remove_contract(inst, B_TRUE, B_TRUE); in enable_inst()
1453 scf_instance_destroy(inst->ri_m_inst); in enable_inst()
1456 log_instance(inst, B_FALSE, "Disabled."); in enable_inst()
1458 inst->ri_i.i_fmri); in enable_inst()
1469 (void) restarter_instance_update_states(h, inst, in enable_inst()
1487 unmaintain_instance(h, inst, RUNMAINT_DISABLE); in enable_inst()
1493 "unknown state %d.\n", inst->ri_i.i_fmri, state); in enable_inst()
1503 start_instance(scf_handle_t *local_handle, restarter_inst_t *inst, in start_instance() argument
1509 assert(MUTEX_HELD(&inst->ri_lock)); in start_instance()
1510 assert(instance_in_transition(inst) == 0); in start_instance()
1511 assert(inst->ri_method_thread == 0); in start_instance()
1514 inst->ri_i.i_fmri); in start_instance()
1529 if (inst->ri_i.i_state == RESTARTER_STATE_MAINT || in start_instance()
1530 inst->ri_i.i_state == RESTARTER_STATE_DISABLED || in start_instance()
1531 inst->ri_i.i_enabled == 0) { in start_instance()
1534 inst->ri_i.i_fmri); in start_instance()
1539 if (instance_started(inst) == 1) { in start_instance()
1542 inst->ri_i.i_fmri); in start_instance()
1546 log_framework(LOG_DEBUG, "%s: starting instance.\n", inst->ri_i.i_fmri); in start_instance()
1548 (void) restarter_instance_update_states(local_handle, inst, in start_instance()
1549 inst->ri_i.i_state, RESTARTER_STATE_ONLINE, RERR_NONE, new_reason); in start_instance()
1553 info->sf_id = inst->ri_id; in start_instance()
1557 inst->ri_method_thread = startd_thread_create(method_thread, info); in start_instance()
1563 scf_instance_t *inst; in event_from_tty() local
1566 if (libscf_fmri_get_instance(h, rip->ri_i.i_fmri, &inst)) in event_from_tty()
1569 ret = restarter_inst_ractions_from_tty(inst); in event_from_tty()
1571 scf_instance_destroy(inst); in event_from_tty()
1578 scf_instance_t *inst; in restart_dump() local
1581 if (libscf_fmri_get_instance(h, rip->ri_i.i_fmri, &inst)) in restart_dump()
1584 if (restarter_inst_dump(inst) == 1) in restart_dump()
1587 scf_instance_destroy(inst); in restart_dump()
1673 scf_instance_t *inst; in refresh_instance() local
1685 r = libscf_fmri_get_instance(h, rip->ri_i.i_fmri, &inst); in refresh_instance()
1704 snap = libscf_get_running_snapshot(inst); in refresh_instance()
1706 r = libscf_get_startd_properties(inst, snap, &rip->ri_flags, in refresh_instance()
1715 scf_instance_destroy(inst); in refresh_instance()
1747 scf_instance_destroy(inst); in refresh_instance()
1786 restarter_inst_t *inst; in restarter_process_events() local
1795 inst = inst_lookup_by_name(fmri); in restarter_process_events()
1796 if (inst == NULL) { in restarter_process_events()
1801 assert(instance_in_transition(inst) == 0); in restarter_process_events()
1807 (void) enable_inst(h, inst, event); in restarter_process_events()
1811 if (enable_inst(h, inst, event) == 0) in restarter_process_events()
1812 reset_start_times(inst); in restarter_process_events()
1816 restarter_delete_inst(inst); in restarter_process_events()
1817 inst = NULL; in restarter_process_events()
1821 reset_start_times(inst); in restarter_process_events()
1824 (void) stop_instance(h, inst, RSTOP_DEPENDENCY); in restarter_process_events()
1828 start_instance(h, inst, event->riq_reason); in restarter_process_events()
1832 maintain_instance(h, inst, 0, in restarter_process_events()
1837 maintain_instance(h, inst, 0, in restarter_process_events()
1842 if (event_from_tty(h, inst) == 0) in restarter_process_events()
1843 maintain_instance(h, inst, 0, in restarter_process_events()
1846 maintain_instance(h, inst, 0, in restarter_process_events()
1851 if (event_from_tty(h, inst) == 0) in restarter_process_events()
1852 maintain_instance(h, inst, 1, in restarter_process_events()
1855 maintain_instance(h, inst, 1, in restarter_process_events()
1860 unmaintain_instance(h, inst, RUNMAINT_CLEAR); in restarter_process_events()
1861 reset_start_times(inst); in restarter_process_events()
1865 refresh_instance(h, inst); in restarter_process_events()
1871 event_names[event->riq_type], inst->ri_i.i_fmri); in restarter_process_events()
1875 if (!instance_started(inst)) { in restarter_process_events()
1878 inst->ri_i.i_fmri); in restarter_process_events()
1884 if (restart_dump(h, inst)) { in restarter_process_events()
1886 inst->ri_i.i_primary_ctid, SIGABRT, in restarter_process_events()
1887 inst->ri_i.i_fmri); in restarter_process_events()
1888 } else if (stop_instance(h, inst, in restarter_process_events()
1890 reset_start_times(inst); in restarter_process_events()
1904 assert(inst != NULL); in restarter_process_events()
1905 MUTEX_UNLOCK(&inst->ri_lock); in restarter_process_events()
2100 restarter_inst_t *inst; in contract_to_inst() local
2107 inst = inst_lookup_by_id(id); in contract_to_inst()
2108 if (inst != NULL) { in contract_to_inst()
2115 if (ctid != inst->ri_i.i_primary_ctid) { in contract_to_inst()
2116 MUTEX_UNLOCK(&inst->ri_lock); in contract_to_inst()
2117 inst = NULL; in contract_to_inst()
2120 return (inst); in contract_to_inst()
2128 contract_action(scf_handle_t *h, restarter_inst_t *inst, ctid_t id, in contract_action() argument
2131 const char *fmri = inst->ri_i.i_fmri; in contract_action()
2133 assert(MUTEX_HELD(&inst->ri_lock)); in contract_action()
2139 if (inst->ri_i.i_primary_ctid > 0 && in contract_action()
2140 inst->ri_i.i_primary_ctid_stopped) in contract_action()
2155 assert(instance_in_transition(inst) == 0); in contract_action()
2157 if (instance_is_wait_style(inst)) { in contract_action()
2172 (void) stop_instance(h, inst, RSTOP_EXIT); in contract_action()
2175 (void) stop_instance(h, inst, RSTOP_CORE); in contract_action()
2178 (void) stop_instance(h, inst, RSTOP_SIGNAL); in contract_action()
2181 (void) stop_instance(h, inst, RSTOP_HWERR); in contract_action()
2234 restarter_inst_t *inst; in restarter_contracts_event_thread() local
2283 inst = NULL; in restarter_contracts_event_thread()
2285 (inst = contract_to_inst(ctid)) == NULL) { in restarter_contracts_event_thread()
2312 if (inst == NULL) in restarter_contracts_event_thread()
2313 inst = contract_to_inst(ctid); in restarter_contracts_event_thread()
2314 if (inst == NULL) { in restarter_contracts_event_thread()
2326 inst->ri_i.i_fmri); in restarter_contracts_event_thread()
2328 contract_action(local_handle, inst, ctid, type); in restarter_contracts_event_thread()
2330 MUTEX_UNLOCK(&inst->ri_lock); in restarter_contracts_event_thread()
2377 is_timeout_ovr(restarter_inst_t *inst) in is_timeout_ovr() argument
2382 if (strcmp(inst->ri_i.i_fmri, timeout_ovr_svcs[i]) == 0) { in is_timeout_ovr()
2383 log_instance(inst, B_TRUE, "Timeout override by " in is_timeout_ovr()
2428 timeout_insert(restarter_inst_t *inst, ctid_t cid, uint64_t timeout_sec) in timeout_insert() argument
2434 assert(MUTEX_HELD(&inst->ri_lock)); in timeout_insert()
2443 log_instance(inst, B_TRUE, "timeout_seconds too large, " in timeout_insert()
2454 entry->te_fmri = safe_strdup(inst->ri_i.i_fmri); in timeout_insert()
2455 entry->te_logstem = safe_strdup(inst->ri_logstem); in timeout_insert()
2464 assert(inst->ri_timeout == NULL); in timeout_insert()
2465 inst->ri_timeout = entry; in timeout_insert()
2475 timeout_remove(restarter_inst_t *inst, ctid_t cid) in timeout_remove() argument
2477 assert(MUTEX_HELD(&inst->ri_lock)); in timeout_remove()
2479 if (inst->ri_timeout == NULL) in timeout_remove()
2482 assert(inst->ri_timeout->te_ctid == cid); in timeout_remove()
2485 uu_list_remove(timeouts->tq_list, inst->ri_timeout); in timeout_remove()
2488 free(inst->ri_timeout->te_fmri); in timeout_remove()
2489 free(inst->ri_timeout->te_logstem); in timeout_remove()
2490 startd_free(inst->ri_timeout, sizeof (timeout_entry_t)); in timeout_remove()
2491 inst->ri_timeout = NULL; in timeout_remove()