Lines Matching refs:cmg

56 void shutdown_all_conn_mt(ns_conn_mgmt_t *cmg);
61 ns_conn_mgmt_t *cmg);
91 #define NS_CONN_UNLOCK_AND_FREE(free, cm, cmg) \
95 cmg = free_conn_mt((cm), 1); \
96 if (cmg != NULL) \
97 (void) mutex_unlock(&(cmg)->lock); \
100 #define NS_CONN_CHECK_ABORT_AND_LOCK(cmg, cu, errp) \
103 (void) mutex_lock(&(cmg)->lock); \
104 if ((cmg)->shutting_down == B_TRUE) \
106 else if ((cmg)->cfg_reloaded == B_TRUE) \
110 (void) mutex_unlock(&(cmg)->lock); \
197 conn_tsd_setup(ns_conn_mgmt_t *cmg)
202 rc = thr_setspecific(ns_cmgkey, cmg);
262 conn_tsd_check(ns_conn_mgmt_t *cmg)
264 if (conn_tsd_setup(cmg) != 0)
373 setup_mt_ld(LDAP *ld, ns_conn_mgmt_t *cmg)
378 if (conn_tsd_setup(cmg) == -1) {
527 ns_conn_mgmt_t *cmg;
529 cmg = (ns_conn_mgmt_t *)calloc(1, sizeof (*cmg));
530 if (cmg == NULL) {
536 cmg->is_nscd = __s_api_nscd_proc();
537 cmg->is_peruser_nscd = __s_api_peruser_proc();
543 cmg->ldap_mt = B_TRUE;
545 cmg->state = NS_CONN_MGMT_INACTIVE;
547 (void) mutex_init(&cmg->lock, USYNC_THREAD, NULL);
548 (void) mutex_init(&cmg->cfg_lock, USYNC_THREAD, NULL);
549 cmg->pid = getpid();
552 if (cmg->is_nscd == B_TRUE || cmg->is_peruser_nscd == B_TRUE)
553 cmg->state = NS_CONN_MGMT_ACTIVE;
559 cmg->config = __s_api_get_default_config_global();
560 if (cmg->config == NULL)
561 cmg->config = __s_api_loadrefresh_config_global();
562 if (cmg->config != NULL) {
567 if (cmg->is_nscd == B_TRUE)
568 (cmg->config)->paramList[NS_LDAP_EXP_P].ns_tm = 0;
569 cmg->cfg_cookie = cmg->config->config_cookie;
572 return (cmg);
578 ns_conn_mgmt_t *cmg = ns_connmgmt;
580 (void) mutex_lock(&cmg->lock);
582 cmg->shutting_down = B_TRUE;
584 cmg->cfg_reloaded = B_TRUE;
585 atomic_inc_uint(&cmg->ref_cnt);
586 cmg->state = NS_CONN_MGMT_DETACHED;
591 (void) mutex_unlock(&cmg->lock);
604 ns_conn_mgmt_t *cmg = ns_connmgmt;
609 if (cmg == NULL || checked_pid != mypid) {
616 if (cmg == NULL || cmg->pid != mypid) {
617 if (cmg != NULL) {
627 ns_connmgmt_parent = cmg;
636 cmg = ns_connmgmt;
642 atomic_inc_uint(&cmg->ref_cnt);
646 return (cmg);
652 ns_conn_mgmt_t *cmg = NULL;
673 cmg = ns_connmgmt;
678 return (cmg);
686 * the previous cmg (cmg_prev) will be freed later
692 cmg = get_current_conn_mgmt(op);
693 if (cmg == NULL) {
698 atomic_inc_uint(&cmg->ref_cnt);
701 cmg = cmg_prev;
703 if (cmg->config == NULL)
704 cmg->config = __s_api_get_default_config();
708 return (cmg);
715 free_conn_mgmt(ns_conn_mgmt_t *cmg)
727 if (cmg == NULL)
729 cookie = cmg->cfg_cookie;
731 __s_api_free2dArray(cmg->pservers);
733 if (cmg->config != NULL) {
734 if (cmg->state == NS_CONN_MGMT_DETACHED)
735 __s_api_destroy_config(cmg->config);
737 __s_api_release_config(cmg->config);
741 if (cmg->procchg_started == B_TRUE) {
742 if (cmg->procchg_tid != thr_self()) {
743 if (cmg->procchg_door_call == B_TRUE) {
763 (void) pthread_cancel(cmg->procchg_tid);
764 cmg->procchg_started = B_FALSE;
768 (void) mutex_destroy(&cmg->cfg_lock);
769 (void) mutex_destroy(&cmg->lock);
770 free(cmg);
774 release_conn_mgmt(ns_conn_mgmt_t *cmg, boolean_t unlock_cmg)
776 if (cmg == NULL)
778 if (atomic_dec_uint_nv(&cmg->ref_cnt) == 0) {
779 if (cmg->state == NS_CONN_MGMT_DETACHED) {
781 (void) mutex_unlock(&cmg->lock);
782 free_conn_mgmt(cmg);
789 " is not DETACHED (%d)"), cmg->state);
790 cmg = NULL;
793 return (cmg);
820 ns_conn_mgmt_t *cmg;
825 cmg = access_conn_mgmt(NS_CONN_MGMT_OP_REF);
826 if (cmg == NULL)
829 if (cmg->state != NS_CONN_MGMT_ACTIVE &&
830 cmg->state != NS_CONN_MGMT_INACTIVE) {
831 atomic_dec_uint(&cmg->ref_cnt);
837 atomic_dec_uint(&cmg->ref_cnt);
847 cu->conn_mgmt = cmg;
849 (void) conn_tsd_setup(cmg);
878 ns_conn_mgmt_t *cmg;
887 cmg = cu->conn_mgmt;
889 (void) release_conn_mgmt(cmg, B_FALSE);
901 init_conn_mt(ns_conn_mgmt_t *cmg, const char *server,
939 if (cmg_a != cmg) {
963 cm->conn_mgmt = cmg;
971 * cmg needs to be unlocked or not.
976 ns_conn_mgmt_t *cmg;
990 cmg = cm->conn_mgmt;
993 return (release_conn_mgmt(cmg, unlock_cmg));
1013 add_cm2cmg(ns_conn_mt_t *cm, ns_conn_mgmt_t *cmg)
1021 if (cmg->cm_head == NULL) {
1022 cmg->cm_head = cm;
1023 cmg->cm_tail = cm;
1026 cm->next = cmg->cm_head;
1027 cmg->cm_head = cm;
1029 cmg->cm_tail->next = cm;
1030 cmg->cm_tail = cm;
1033 cmg->cm_cnt++;
1083 del_cm4cmg(ns_conn_mt_t *cm, ns_conn_mgmt_t *cmg)
1087 if (cm == NULL || cmg->cm_head == NULL || cmg->cm_cnt == 0)
1091 if (cmg->cm_head == cmg->cm_tail) {
1092 if (cm == cmg->cm_head) {
1093 cmg->cm_head = cmg->cm_tail = NULL;
1094 cmg->cm_cnt = 0;
1101 if (cm == cmg->cm_head) {
1102 cmg->cm_head = cm->next;
1103 cmg->cm_cnt--;
1108 pm = cmg->cm_head;
1109 for (m = cmg->cm_head->next; m; m = m->next) {
1114 if (pm != cmg->cm_tail) {
1117 cmg->cm_tail = pm;
1118 cmg->cm_cnt--;
1208 * This function assumes conn_mgmt cmg and conn_mt *cm are locked.
1211 check_and_close_conn(ns_conn_mgmt_t *cmg, ns_conn_mt_t **cm,
1226 if (cmg->pservers_loaded == B_FALSE)
1227 get_preferred_servers(B_FALSE, B_FALSE, cmg);
1228 if (cmg->pservers == NULL)
1244 for (j = 0; cmg->pservers[j] != NULL; j++) {
1245 if (strcasecmp(sinfo.server, cmg->pservers[j]) != 0)
1254 for (j = 0; cmg->pservers[j] != NULL; j++) {
1255 if (strcasecmp(cmg->pservers[j], (*cm)->conn->serverAddr) != 0)
1296 if (cmg->shutting_down == B_FALSE)
1304 if (cmg->shutting_down == B_FALSE)
1337 ns_conn_mgmt_t *cmg = cm->conn_mgmt;
1405 cmg->is_nscd == B_FALSE && !__s_api_isStandalone()) {
1406 drop_conn = check_and_close_conn(cmg, &cm, cu);
1450 ns_conn_mgmt_t *cmg;
1456 cmg = cu->conn_mgmt;
1475 if (!((cmg->state == NS_CONN_MGMT_INACTIVE &&
1476 cu->keep_conn == B_TRUE) || cmg->state == NS_CONN_MGMT_ACTIVE))
1482 NS_CONN_CHECK_ABORT_AND_LOCK(cmg, cu, errorp);
1488 for (cn = cmg->cm_head; cn; cn = cn->next) {
1512 (void) mutex_unlock(&cmg->lock);
1546 /* cmg->lock unlocked by wait_for_conn_mt() */
1556 /* cmg->lock unlocked by wait_for_conn_mt() */
1567 cn = init_conn_mt(cmg, server, cred, errorp);
1569 (void) mutex_unlock(&cmg->lock);
1575 if (cmg->ldap_mt == B_TRUE)
1579 add_cm2cmg(cn, cmg);
1580 (void) mutex_unlock(&cmg->lock);
1598 ns_conn_mgmt_t *cmg = cu->conn_mgmt;
1602 NS_CONN_CHECK_ABORT_AND_LOCK(cmg, cu, ep);
1609 if (cmg->procchg_started == B_FALSE && cmg->is_nscd == B_TRUE) {
1610 start_thread(cmg);
1611 cmg->procchg_started = B_TRUE;
1623 if (cmg->ldap_mt == B_TRUE)
1632 (void) mutex_unlock(&cmg->lock);
1648 ns_conn_mgmt_t *cmg;
1655 cmg = cu->conn_mgmt;
1671 (void) mutex_lock(&cmg->lock);
1673 del_cm4cmg(cm, cmg);
1675 NS_CONN_UNLOCK_AND_FREE(ns_conn_free, cm, cmg);
1755 ns_conn_mgmt_t *cmg;
1763 cmg = cu->conn_mgmt;
1765 (void) mutex_lock(&cmg->lock);
1783 if (!cmg->shutting_down)
1787 del_cm4cmg(cm, cmg);
1791 NS_CONN_UNLOCK_AND_FREE(free_cm, cm, cmg);
1803 ns_conn_mgmt_t *cmg;
1809 cmg = cu->conn_mgmt;
1810 rc = setup_mt_ld(ld, cmg);
1812 if (cmg->do_mt_conn == B_FALSE) {
1815 * if cmg is usable, cmg->lock will be locked. Otherwise,
1818 NS_CONN_CHECK_ABORT_AND_LOCK(cmg, cu, ep);
1819 if (cmg->do_mt_conn == B_FALSE) {
1821 cmg->ldap_mt = B_FALSE;
1823 cmg->ldap_mt = B_TRUE;
1824 if (cmg->is_nscd == B_TRUE ||
1825 cmg->is_peruser_nscd == B_TRUE) {
1826 cmg->do_mt_conn = B_TRUE;
1827 cmg->state = NS_CONN_MGMT_ACTIVE;
1831 (void) mutex_unlock(&cmg->lock);
1848 ns_conn_mgmt_t *cmg = cm->conn_mgmt;
1853 NS_CONN_MT_CLOSING) || cmg->cm_head == NULL || cmg->cm_cnt == 0)
1857 for (m = cmg->cm_head; m; m = m->next) {
1896 if (cmg->shutting_down == B_FALSE)
1905 del_cm4cmg(cm, cmg);
1928 ns_conn_mgmt_t *cmg;
1937 cmg = cu->conn_mgmt;
1939 (void) mutex_lock(&cmg->lock);
1946 (void) mutex_unlock(&cmg->lock);
1960 if (cmg->shutting_down == B_FALSE)
1962 NS_CONN_UNLOCK_AND_FREE(free_cm, cm, cmg);
1974 ns_conn_mgmt_t *cmg;
1980 cmg = cm->conn_mgmt;
1989 (void) mutex_lock(&cmg->lock);
1996 (void) mutex_unlock(&cmg->lock);
2001 NS_CONN_UNLOCK_AND_FREE(free_cm, cm, cmg);
2032 get_preferred_servers(boolean_t lock, boolean_t reload, ns_conn_mgmt_t *cmg)
2038 (void) mutex_lock(&cmg->lock);
2041 if (cmg->pservers_loaded == B_TRUE && reload == B_FALSE)
2044 if (cmg->pservers != NULL) {
2045 (void) __ns_ldap_freeParam((void ***)&cmg->pservers);
2046 cmg->pservers = NULL;
2051 cmg->pservers = (char **)pservers;
2052 cmg->pservers_loaded = B_TRUE;
2064 proc_server_change(ns_server_status_change_t *chg, ns_conn_mgmt_t *cmg)
2086 return (cmg);
2101 (void) mutex_lock(&cmg->lock);
2104 for (cm = cmg->cm_head; cm; cm = cm->next) {
2117 (void) mutex_unlock(&cmg->lock);
2144 B_FALSE, cmg);
2150 if (cmg->pservers == NULL) {
2151 (void) mutex_unlock(&cmg->lock);
2152 return (cmg);
2171 (void) mutex_lock(&cmg->lock);
2177 for (j = 0; cmg->pservers[j] != NULL; j++) {
2178 if (strcasecmp(cmg->pservers[j],
2191 for (cm = cmg->cm_head; cm; cm = cm->next) {
2216 cmg->pservers[j]) == 0) {
2233 cm, cmg);
2254 (void) mutex_unlock(&cmg->lock);
2255 return (cmg);
2260 shutdown_all_conn_mt(ns_conn_mgmt_t *cmg)
2273 (void) mutex_lock(&cmg->lock);
2274 while (cmg->cm_head != NULL && done == B_FALSE) {
2275 for (cm = cmg->cm_head; cm; cm = cm->next) {
2292 (void) mutex_unlock(&cmg->lock);
2300 ns_conn_mgmt_t *cmg;
2302 cmg = access_conn_mgmt(NS_CONN_MGMT_OP_SHUTDOWN);
2303 if (cmg == NULL) /* already being SHUT done */
2306 (void) shutdown_all_conn_mt(cmg);
2307 (void) release_conn_mgmt(cmg, B_FALSE);
2310 (void) release_conn_mgmt(cmg, B_FALSE);
2321 ns_conn_mgmt_t *cmg;
2324 cmg = access_conn_mgmt(NS_CONN_MGMT_OP_REF);
2325 if (cmg == NULL)
2327 if (cmg->config == new_cfg || cmg->state == NS_CONN_MGMT_DETACHED) {
2328 (void) release_conn_mgmt(cmg, B_FALSE);
2334 if (ocmg == cmg)
2341 (void) release_conn_mgmt(cmg, B_FALSE);
2360 ns_conn_mgmt_t *cmg;
2369 cmg = cu->conn_mgmt;
2373 if (cmg != NULL && cmg->cfg_reloaded == B_TRUE)
2409 ns_conn_mgmt_t *cmg;
2415 if (cu->conn_mt != NULL && (cmg = cu->conn_mgmt) != NULL) {
2425 rc = conn_tsd_check(cmg);
2507 ns_conn_mgmt_t *cmg;
2514 cmg = access_conn_mgmt(NS_CONN_MGMT_OP_REF);
2515 if (cmg != ocmg)
2517 /* cmg is locked before called */
2518 cmg->procchg_tid = thr_self();
2521 (void) conn_tsd_setup(cmg);
2522 cookie = cmg->cfg_cookie;
2541 if (cmg == NULL || cmg->state == NS_CONN_MGMT_DETACHED ||
2544 if (cmg != NULL) {
2545 cmg->procchg_started = B_FALSE;
2546 (void) release_conn_mgmt(cmg, B_FALSE);
2563 cmg->procchg_door_call = B_TRUE;
2564 if (release_conn_mgmt(cmg, B_FALSE) == NULL) {
2577 cmg = access_conn_mgmt(NS_CONN_MGMT_OP_REF);
2578 if (cmg != NULL)
2579 cmg->procchg_door_call = B_FALSE;
2580 if (cmg != ocmg) {
2581 if (cmg != NULL) {
2582 cmg->procchg_started = B_FALSE;
2583 (void) release_conn_mgmt(cmg, B_FALSE);
2612 cmg = proc_server_change(&chg, cmg);
2626 cmg = proc_server_change(&chg, cmg);
2683 cmg = proc_server_change(&chg, cmg);
2694 start_thread(ns_conn_mgmt_t *cmg) {
2702 (void *)cmg, THR_DETACHED, NULL) != 0) {