Lines Matching refs:inst

152 reset_start_times(restarter_inst_t *inst)  in reset_start_times()  argument
154 inst->ri_start_index = 0; in reset_start_times()
155 bzero(inst->ri_start_time, sizeof (inst->ri_start_time)); in reset_start_times()
188 restarter_inst_t *inst; in inst_lookup_by_id() local
191 inst = uu_list_find(instance_list.ril_instance_list, &id, NULL, NULL); in inst_lookup_by_id()
192 if (inst != NULL) in inst_lookup_by_id()
193 MUTEX_LOCK(&inst->ri_lock); in inst_lookup_by_id()
196 if (inst != NULL) { in inst_lookup_by_id()
197 while (inst->ri_method_thread != 0 && in inst_lookup_by_id()
198 !pthread_equal(inst->ri_method_thread, pthread_self())) { in inst_lookup_by_id()
199 ++inst->ri_method_waiters; in inst_lookup_by_id()
200 (void) pthread_cond_wait(&inst->ri_method_cv, in inst_lookup_by_id()
201 &inst->ri_lock); in inst_lookup_by_id()
202 assert(inst->ri_method_waiters > 0); in inst_lookup_by_id()
203 --inst->ri_method_waiters; in inst_lookup_by_id()
207 return (inst); in inst_lookup_by_id()
214 restarter_inst_t *inst; in inst_lookup_queue() local
221 inst = uu_list_find(instance_list.ril_instance_list, &id, NULL, NULL); in inst_lookup_queue()
222 if (inst != NULL) in inst_lookup_queue()
223 MUTEX_LOCK(&inst->ri_queue_lock); in inst_lookup_queue()
226 return (inst); in inst_lookup_queue()
250 check_contract(restarter_inst_t *inst, boolean_t primary, in check_contract() argument
256 ctidp = primary ? &inst->ri_i.i_primary_ctid : in check_contract()
257 &inst->ri_i.i_transient_ctid; in check_contract()
291 "for %s from repository.\n", *ctidp, inst->ri_i.i_fmri); in check_contract()
318 restarter_inst_t *inst; in restarter_insert_inst() local
341 inst = uu_list_find(instance_list.ril_instance_list, &id, NULL, in restarter_insert_inst()
343 if (inst != NULL) { in restarter_insert_inst()
350 inst = startd_zalloc(sizeof (restarter_inst_t)); in restarter_insert_inst()
351 inst->ri_utmpx_prefix = startd_alloc(max_scf_value_size); in restarter_insert_inst()
352 inst->ri_utmpx_prefix[0] = '\0'; in restarter_insert_inst()
354 inst->ri_i.i_fmri = startd_alloc(strlen(name) + 1); in restarter_insert_inst()
355 (void) strcpy((char *)inst->ri_i.i_fmri, name); in restarter_insert_inst()
357 inst->ri_queue = startd_list_create(restarter_queue_pool, inst, 0); in restarter_insert_inst()
363 inst->ri_id = (id != -1 ? id : dict_insert(name)); in restarter_insert_inst()
365 special_online_hooks_get(name, &inst->ri_pre_online_hook, in restarter_insert_inst()
366 &inst->ri_post_online_hook, &inst->ri_post_offline_hook); in restarter_insert_inst()
377 if (inst->ri_logstem != NULL) in restarter_insert_inst()
378 startd_free(inst->ri_logstem, PATH_MAX); in restarter_insert_inst()
379 if (inst->ri_common_name != NULL) in restarter_insert_inst()
380 free(inst->ri_common_name); in restarter_insert_inst()
381 if (inst->ri_C_common_name != NULL) in restarter_insert_inst()
382 free(inst->ri_C_common_name); in restarter_insert_inst()
384 inst->ri_logstem = NULL; in restarter_insert_inst()
385 inst->ri_common_name = NULL; in restarter_insert_inst()
386 inst->ri_C_common_name = NULL; in restarter_insert_inst()
433 inst->ri_logstem = startd_alloc(PATH_MAX); in restarter_insert_inst()
434 (void) snprintf(inst->ri_logstem, PATH_MAX, "%s%s", logfilebuf, in restarter_insert_inst()
495 inst->ri_i.i_state = ps->ps_state = state; in restarter_insert_inst()
496 inst->ri_i.i_next_state = ps->ps_state_next = in restarter_insert_inst()
500 graph_protocol_send_event(inst->ri_i.i_fmri, in restarter_insert_inst()
508 switch (libscf_get_startd_properties(scf_inst, snap, &inst->ri_flags, in restarter_insert_inst()
509 &inst->ri_utmpx_prefix)) { in restarter_insert_inst()
528 inst->ri_flags = RINST_CONTRACT; in restarter_insert_inst()
537 &inst->ri_common_name, &inst->ri_C_common_name); in restarter_insert_inst()
542 if (inst->ri_common_name != NULL) { in restarter_insert_inst()
543 char *tmp = safe_strdup(inst->ri_common_name); in restarter_insert_inst()
544 startd_free(inst->ri_common_name, max_scf_value_size); in restarter_insert_inst()
545 inst->ri_common_name = tmp; in restarter_insert_inst()
548 if (inst->ri_C_common_name != NULL) { in restarter_insert_inst()
549 char *tmp = safe_strdup(inst->ri_C_common_name); in restarter_insert_inst()
550 startd_free(inst->ri_C_common_name, max_scf_value_size); in restarter_insert_inst()
551 inst->ri_C_common_name = tmp; in restarter_insert_inst()
574 switch (libscf_read_method_ids(h, scf_inst, inst->ri_i.i_fmri, in restarter_insert_inst()
575 &inst->ri_i.i_primary_ctid, &inst->ri_i.i_transient_ctid, in restarter_insert_inst()
592 if (inst->ri_i.i_primary_ctid >= 1) { in restarter_insert_inst()
593 contract_hash_store(inst->ri_i.i_primary_ctid, inst->ri_id); in restarter_insert_inst()
595 switch (check_contract(inst, B_TRUE, scf_inst)) { in restarter_insert_inst()
612 if (inst->ri_i.i_transient_ctid >= 1) { in restarter_insert_inst()
613 switch (check_contract(inst, B_FALSE, scf_inst)) { in restarter_insert_inst()
631 (void) pthread_mutex_init(&inst->ri_lock, &mutex_attrs); in restarter_insert_inst()
632 (void) pthread_mutex_init(&inst->ri_queue_lock, &mutex_attrs); in restarter_insert_inst()
633 MUTEX_LOCK(&inst->ri_lock); in restarter_insert_inst()
634 MUTEX_LOCK(&inst->ri_queue_lock); in restarter_insert_inst()
636 (void) pthread_cond_init(&inst->ri_method_cv, NULL); in restarter_insert_inst()
638 uu_list_node_init(inst, &inst->ri_link, restarter_instance_pool); in restarter_insert_inst()
639 uu_list_insert(instance_list.ril_instance_list, inst, idx); in restarter_insert_inst()
643 (inst->ri_flags & RINST_STYLE_MASK) == RINST_WAIT) { in restarter_insert_inst()
645 ret = wait_register(start_pid, inst->ri_i.i_fmri, 0, 1); in restarter_insert_inst()
655 inst->ri_i.i_fmri, start_pid); in restarter_insert_inst()
660 (void) stop_instance(h, inst, RSTOP_EXIT); in restarter_insert_inst()
668 (void) restarter_instance_update_states(h, inst, state, in restarter_insert_inst()
672 service_style(inst->ri_flags)); in restarter_insert_inst()
674 MUTEX_UNLOCK(&inst->ri_queue_lock); in restarter_insert_inst()
675 MUTEX_UNLOCK(&inst->ri_lock); in restarter_insert_inst()
697 startd_free((void *)inst->ri_i.i_fmri, strlen(inst->ri_i.i_fmri) + 1); in restarter_insert_inst()
698 uu_list_destroy(inst->ri_queue); in restarter_insert_inst()
699 if (inst->ri_logstem != NULL) in restarter_insert_inst()
700 startd_free(inst->ri_logstem, PATH_MAX); in restarter_insert_inst()
701 if (inst->ri_common_name != NULL) in restarter_insert_inst()
702 free(inst->ri_common_name); in restarter_insert_inst()
703 if (inst->ri_C_common_name != NULL) in restarter_insert_inst()
704 free(inst->ri_C_common_name); in restarter_insert_inst()
705 startd_free(inst->ri_utmpx_prefix, max_scf_value_size); in restarter_insert_inst()
706 startd_free(inst, sizeof (restarter_inst_t)); in restarter_insert_inst()
779 instance_is_wait_style(restarter_inst_t *inst) in instance_is_wait_style() argument
781 assert(MUTEX_HELD(&inst->ri_lock)); in instance_is_wait_style()
782 return ((inst->ri_flags & RINST_STYLE_MASK) == RINST_WAIT); in instance_is_wait_style()
791 instance_is_transient_style(restarter_inst_t *inst) in instance_is_transient_style() argument
793 assert(MUTEX_HELD(&inst->ri_lock)); in instance_is_transient_style()
794 return ((inst->ri_flags & RINST_STYLE_MASK) == RINST_TRANSIENT); in instance_is_transient_style()
802 instance_in_transition(restarter_inst_t *inst) in instance_in_transition() argument
804 assert(MUTEX_HELD(&inst->ri_lock)); in instance_in_transition()
805 if (inst->ri_i.i_next_state == RESTARTER_STATE_NONE) in instance_in_transition()
814 instance_started(restarter_inst_t *inst) in instance_started() argument
818 assert(MUTEX_HELD(&inst->ri_lock)); in instance_started()
820 if (inst->ri_i.i_state == RESTARTER_STATE_ONLINE || in instance_started()
821 inst->ri_i.i_state == RESTARTER_STATE_DEGRADED) in instance_started()
913 restarter_inst_t *inst; in restarter_mark_pending_snapshot() local
917 inst = inst_lookup_by_name(fmri); in restarter_mark_pending_snapshot()
918 if (inst == NULL) in restarter_mark_pending_snapshot()
921 inst->ri_flags |= flag; in restarter_mark_pending_snapshot()
923 MUTEX_UNLOCK(&inst->ri_lock); in restarter_mark_pending_snapshot()
929 restarter_inst_t *inst; in restarter_take_pending_snapshots() local
934 for (inst = uu_list_first(instance_list.ril_instance_list); in restarter_take_pending_snapshots()
935 inst != NULL; in restarter_take_pending_snapshots()
936 inst = uu_list_next(instance_list.ril_instance_list, inst)) { in restarter_take_pending_snapshots()
940 MUTEX_LOCK(&inst->ri_lock); in restarter_take_pending_snapshots()
950 fmri = inst->ri_i.i_fmri; in restarter_take_pending_snapshots()
952 if (inst->ri_flags & RINST_RETAKE_RUNNING) { in restarter_take_pending_snapshots()
963 inst->ri_flags &= ~RINST_RETAKE_RUNNING; in restarter_take_pending_snapshots()
968 if (inst->ri_flags & RINST_RETAKE_START) { in restarter_take_pending_snapshots()
973 inst->ri_flags &= ~RINST_RETAKE_START; in restarter_take_pending_snapshots()
985 MUTEX_UNLOCK(&inst->ri_lock); in restarter_take_pending_snapshots()
1030 stop_instance(scf_handle_t *local_handle, restarter_inst_t *inst, in stop_instance() argument
1040 assert(MUTEX_HELD(&inst->ri_lock)); in stop_instance()
1041 assert(inst->ri_method_thread == 0); in stop_instance()
1098 if (inst->ri_i.i_state == RESTARTER_STATE_MAINT || in stop_instance()
1099 inst->ri_i.i_state == RESTARTER_STATE_DISABLED) { in stop_instance()
1102 inst->ri_i.i_fmri); in stop_instance()
1107 if (instance_started(inst) == 0) { in stop_instance()
1109 inst->ri_i.i_fmri); in stop_instance()
1113 if (instance_in_transition(inst)) { in stop_instance()
1117 inst->ri_i.i_fmri); in stop_instance()
1121 log_instance(inst, B_TRUE, "Stopping because %s.", cp); in stop_instance()
1124 "%s: Instance stopping because %s.\n", inst->ri_i.i_fmri, cp); in stop_instance()
1126 if (instance_is_wait_style(inst) && in stop_instance()
1135 inst, inst->ri_i.i_state, RESTARTER_STATE_OFFLINE, re, in stop_instance()
1155 (void) update_fault_count(inst, FAULT_COUNT_INCR); in stop_instance()
1156 if (method_rate_critical(inst)) { in stop_instance()
1157 log_instance(inst, B_TRUE, "Failing too " in stop_instance()
1162 (void) update_fault_count(inst, FAULT_COUNT_RESET); in stop_instance()
1163 reset_start_times(inst); in stop_instance()
1166 if (inst->ri_i.i_primary_ctid != 0) { in stop_instance()
1167 inst->ri_m_inst = in stop_instance()
1169 inst->ri_mi_deleted = B_FALSE; in stop_instance()
1171 libscf_reget_instance(inst); in stop_instance()
1172 method_remove_contract(inst, B_TRUE, B_TRUE); in stop_instance()
1174 scf_instance_destroy(inst->ri_m_inst); in stop_instance()
1175 inst->ri_m_inst = NULL; in stop_instance()
1179 inst, inst->ri_i.i_next_state, RESTARTER_STATE_NONE, re, in stop_instance()
1191 } else if (instance_is_wait_style(inst) && re == RERR_RESTART) { in stop_instance()
1199 wait_ignore_by_fmri(inst->ri_i.i_fmri); in stop_instance()
1214 new_state = inst->ri_i.i_enabled ? in stop_instance()
1217 switch (err = restarter_instance_update_states(local_handle, inst, in stop_instance()
1218 inst->ri_i.i_state, new_state, RERR_NONE, reason)) { in stop_instance()
1229 info->sf_id = inst->ri_id; in stop_instance()
1233 inst->ri_method_thread = startd_thread_create(method_thread, info); in stop_instance()
1267 scf_instance_t *inst; in unmaintain_instance() local
1319 switch (r = libscf_fmri_get_instance(h, rip->ri_i.i_fmri, &inst)) { in unmaintain_instance()
1338 r = restarter_remove_contract(inst, ctid, RESTARTER_CONTRACT_PRIMARY); in unmaintain_instance()
1355 scf_instance_destroy(inst); in unmaintain_instance()
1376 scf_instance_destroy(inst); in unmaintain_instance()
1391 enable_inst(scf_handle_t *h, restarter_inst_t *inst, in enable_inst() argument
1399 assert(MUTEX_HELD(&inst->ri_lock)); in enable_inst()
1403 assert(instance_in_transition(inst) == 0); in enable_inst()
1405 state = inst->ri_i.i_state; in enable_inst()
1408 inst->ri_i.i_enabled = 1; in enable_inst()
1417 log_instance(inst, B_FALSE, "Enabled."); in enable_inst()
1419 inst->ri_i.i_fmri); in enable_inst()
1430 (void) restarter_instance_update_states(h, inst, in enable_inst()
1436 inst->ri_i.i_fmri); in enable_inst()
1439 inst->ri_i.i_enabled = 0; in enable_inst()
1444 r = stop_instance(h, inst, RSTOP_DISABLE); in enable_inst()
1449 if (inst->ri_i.i_primary_ctid != 0) { in enable_inst()
1450 inst->ri_m_inst = safe_scf_instance_create(h); in enable_inst()
1451 inst->ri_mi_deleted = B_FALSE; in enable_inst()
1453 libscf_reget_instance(inst); in enable_inst()
1454 method_remove_contract(inst, B_TRUE, B_TRUE); in enable_inst()
1456 scf_instance_destroy(inst->ri_m_inst); in enable_inst()
1459 log_instance(inst, B_FALSE, "Disabled."); in enable_inst()
1461 inst->ri_i.i_fmri); in enable_inst()
1472 (void) restarter_instance_update_states(h, inst, in enable_inst()
1490 unmaintain_instance(h, inst, RUNMAINT_DISABLE); in enable_inst()
1496 "unknown state %d.\n", inst->ri_i.i_fmri, state); in enable_inst()
1506 start_instance(scf_handle_t *local_handle, restarter_inst_t *inst, in start_instance() argument
1512 assert(MUTEX_HELD(&inst->ri_lock)); in start_instance()
1513 assert(instance_in_transition(inst) == 0); in start_instance()
1514 assert(inst->ri_method_thread == 0); in start_instance()
1517 inst->ri_i.i_fmri); in start_instance()
1532 if (inst->ri_i.i_state == RESTARTER_STATE_MAINT || in start_instance()
1533 inst->ri_i.i_state == RESTARTER_STATE_DISABLED || in start_instance()
1534 inst->ri_i.i_enabled == 0) { in start_instance()
1537 inst->ri_i.i_fmri); in start_instance()
1542 if (instance_started(inst) == 1) { in start_instance()
1545 inst->ri_i.i_fmri); in start_instance()
1549 log_framework(LOG_DEBUG, "%s: starting instance.\n", inst->ri_i.i_fmri); in start_instance()
1551 (void) restarter_instance_update_states(local_handle, inst, in start_instance()
1552 inst->ri_i.i_state, RESTARTER_STATE_ONLINE, RERR_NONE, new_reason); in start_instance()
1556 info->sf_id = inst->ri_id; in start_instance()
1560 inst->ri_method_thread = startd_thread_create(method_thread, info); in start_instance()
1566 scf_instance_t *inst; in event_from_tty() local
1569 if (libscf_fmri_get_instance(h, rip->ri_i.i_fmri, &inst)) in event_from_tty()
1572 ret = restarter_inst_ractions_from_tty(inst); in event_from_tty()
1574 scf_instance_destroy(inst); in event_from_tty()
1581 scf_instance_t *inst; in restart_dump() local
1584 if (libscf_fmri_get_instance(h, rip->ri_i.i_fmri, &inst)) in restart_dump()
1587 if (restarter_inst_dump(inst) == 1) in restart_dump()
1590 scf_instance_destroy(inst); in restart_dump()
1676 scf_instance_t *inst; in refresh_instance() local
1688 r = libscf_fmri_get_instance(h, rip->ri_i.i_fmri, &inst); in refresh_instance()
1707 snap = libscf_get_running_snapshot(inst); in refresh_instance()
1709 r = libscf_get_startd_properties(inst, snap, &rip->ri_flags, in refresh_instance()
1718 scf_instance_destroy(inst); in refresh_instance()
1750 scf_instance_destroy(inst); in refresh_instance()
1791 restarter_inst_t *inst; in restarter_process_events() local
1800 inst = inst_lookup_by_name(fmri); in restarter_process_events()
1801 if (inst == NULL) { in restarter_process_events()
1806 assert(instance_in_transition(inst) == 0); in restarter_process_events()
1812 (void) enable_inst(h, inst, event); in restarter_process_events()
1816 if (enable_inst(h, inst, event) == 0) in restarter_process_events()
1817 reset_start_times(inst); in restarter_process_events()
1821 restarter_delete_inst(inst); in restarter_process_events()
1822 inst = NULL; in restarter_process_events()
1826 reset_start_times(inst); in restarter_process_events()
1829 (void) stop_instance(h, inst, RSTOP_DEPENDENCY); in restarter_process_events()
1833 start_instance(h, inst, event->riq_reason); in restarter_process_events()
1837 maintain_instance(h, inst, 0, in restarter_process_events()
1842 maintain_instance(h, inst, 0, in restarter_process_events()
1847 if (event_from_tty(h, inst) == 0) in restarter_process_events()
1848 maintain_instance(h, inst, 0, in restarter_process_events()
1851 maintain_instance(h, inst, 0, in restarter_process_events()
1856 if (event_from_tty(h, inst) == 0) in restarter_process_events()
1857 maintain_instance(h, inst, 1, in restarter_process_events()
1860 maintain_instance(h, inst, 1, in restarter_process_events()
1865 unmaintain_instance(h, inst, RUNMAINT_CLEAR); in restarter_process_events()
1866 reset_start_times(inst); in restarter_process_events()
1870 refresh_instance(h, inst); in restarter_process_events()
1876 event_names[event->riq_type], inst->ri_i.i_fmri); in restarter_process_events()
1880 if (!instance_started(inst)) { in restarter_process_events()
1883 inst->ri_i.i_fmri); in restarter_process_events()
1889 if (restart_dump(h, inst)) { in restarter_process_events()
1891 inst->ri_i.i_primary_ctid, SIGABRT, in restarter_process_events()
1892 inst->ri_i.i_fmri); in restarter_process_events()
1893 } else if (stop_instance(h, inst, in restarter_process_events()
1895 reset_start_times(inst); in restarter_process_events()
1909 assert(inst != NULL); in restarter_process_events()
1910 MUTEX_UNLOCK(&inst->ri_lock); in restarter_process_events()
2099 restarter_inst_t *inst; in contract_to_inst() local
2106 inst = inst_lookup_by_id(id); in contract_to_inst()
2107 if (inst != NULL) { in contract_to_inst()
2114 if (ctid != inst->ri_i.i_primary_ctid) { in contract_to_inst()
2115 MUTEX_UNLOCK(&inst->ri_lock); in contract_to_inst()
2116 inst = NULL; in contract_to_inst()
2119 return (inst); in contract_to_inst()
2127 contract_action(scf_handle_t *h, restarter_inst_t *inst, ctid_t id, in contract_action() argument
2130 const char *fmri = inst->ri_i.i_fmri; in contract_action()
2132 assert(MUTEX_HELD(&inst->ri_lock)); in contract_action()
2138 if (inst->ri_i.i_primary_ctid > 0 && in contract_action()
2139 inst->ri_i.i_primary_ctid_stopped) in contract_action()
2154 assert(instance_in_transition(inst) == 0); in contract_action()
2156 if (instance_is_wait_style(inst)) { in contract_action()
2171 (void) stop_instance(h, inst, RSTOP_EXIT); in contract_action()
2174 (void) stop_instance(h, inst, RSTOP_CORE); in contract_action()
2177 (void) stop_instance(h, inst, RSTOP_SIGNAL); in contract_action()
2180 (void) stop_instance(h, inst, RSTOP_HWERR); in contract_action()
2235 restarter_inst_t *inst; in restarter_contracts_event_thread() local
2284 inst = NULL; in restarter_contracts_event_thread()
2286 (inst = contract_to_inst(ctid)) == NULL) { in restarter_contracts_event_thread()
2313 if (inst == NULL) in restarter_contracts_event_thread()
2314 inst = contract_to_inst(ctid); in restarter_contracts_event_thread()
2315 if (inst == NULL) { in restarter_contracts_event_thread()
2327 inst->ri_i.i_fmri); in restarter_contracts_event_thread()
2329 contract_action(local_handle, inst, ctid, type); in restarter_contracts_event_thread()
2331 MUTEX_UNLOCK(&inst->ri_lock); in restarter_contracts_event_thread()
2378 is_timeout_ovr(restarter_inst_t *inst) in is_timeout_ovr() argument
2383 if (strcmp(inst->ri_i.i_fmri, timeout_ovr_svcs[i]) == 0) { in is_timeout_ovr()
2384 log_instance(inst, B_TRUE, "Timeout override by " in is_timeout_ovr()
2429 timeout_insert(restarter_inst_t *inst, ctid_t cid, uint64_t timeout_sec) in timeout_insert() argument
2435 assert(MUTEX_HELD(&inst->ri_lock)); in timeout_insert()
2444 log_instance(inst, B_TRUE, "timeout_seconds too large, " in timeout_insert()
2455 entry->te_fmri = safe_strdup(inst->ri_i.i_fmri); in timeout_insert()
2456 entry->te_logstem = safe_strdup(inst->ri_logstem); in timeout_insert()
2465 assert(inst->ri_timeout == NULL); in timeout_insert()
2466 inst->ri_timeout = entry; in timeout_insert()
2476 timeout_remove(restarter_inst_t *inst, ctid_t cid) in timeout_remove() argument
2478 assert(MUTEX_HELD(&inst->ri_lock)); in timeout_remove()
2480 if (inst->ri_timeout == NULL) in timeout_remove()
2483 assert(inst->ri_timeout->te_ctid == cid); in timeout_remove()
2486 uu_list_remove(timeouts->tq_list, inst->ri_timeout); in timeout_remove()
2489 free(inst->ri_timeout->te_fmri); in timeout_remove()
2490 free(inst->ri_timeout->te_logstem); in timeout_remove()
2491 startd_free(inst->ri_timeout, sizeof (timeout_entry_t)); in timeout_remove()
2492 inst->ri_timeout = NULL; in timeout_remove()