Lines Matching refs:cmg

59 void shutdown_all_conn_mt(ns_conn_mgmt_t *cmg);
64 ns_conn_mgmt_t *cmg);
94 #define NS_CONN_UNLOCK_AND_FREE(free, cm, cmg) \
98 cmg = free_conn_mt((cm), 1); \
99 if (cmg != NULL) \
100 (void) mutex_unlock(&(cmg)->lock); \
103 #define NS_CONN_CHECK_ABORT_AND_LOCK(cmg, cu, errp) \
106 (void) mutex_lock(&(cmg)->lock); \
107 if ((cmg)->shutting_down == B_TRUE) \
109 else if ((cmg)->cfg_reloaded == B_TRUE) \
113 (void) mutex_unlock(&(cmg)->lock); \
200 conn_tsd_setup(ns_conn_mgmt_t *cmg)
205 rc = thr_setspecific(ns_cmgkey, cmg);
265 conn_tsd_check(ns_conn_mgmt_t *cmg)
267 if (conn_tsd_setup(cmg) != 0)
376 setup_mt_ld(LDAP *ld, ns_conn_mgmt_t *cmg)
381 if (conn_tsd_setup(cmg) == -1) {
530 ns_conn_mgmt_t *cmg;
532 cmg = (ns_conn_mgmt_t *)calloc(1, sizeof (*cmg));
533 if (cmg == NULL) {
539 cmg->is_nscd = __s_api_nscd_proc();
540 cmg->is_peruser_nscd = __s_api_peruser_proc();
546 cmg->ldap_mt = B_TRUE;
548 cmg->state = NS_CONN_MGMT_INACTIVE;
550 (void) mutex_init(&cmg->lock, USYNC_THREAD, NULL);
551 (void) mutex_init(&cmg->cfg_lock, USYNC_THREAD, NULL);
552 cmg->pid = getpid();
555 if (cmg->is_nscd == B_TRUE || cmg->is_peruser_nscd == B_TRUE)
556 cmg->state = NS_CONN_MGMT_ACTIVE;
562 cmg->config = __s_api_get_default_config_global();
563 if (cmg->config == NULL)
564 cmg->config = __s_api_loadrefresh_config_global();
565 if (cmg->config != NULL) {
570 if (cmg->is_nscd == B_TRUE)
571 (cmg->config)->paramList[NS_LDAP_EXP_P].ns_tm = 0;
572 cmg->cfg_cookie = cmg->config->config_cookie;
575 return (cmg);
581 ns_conn_mgmt_t *cmg = ns_connmgmt;
583 (void) mutex_lock(&cmg->lock);
585 cmg->shutting_down = B_TRUE;
587 cmg->cfg_reloaded = B_TRUE;
588 atomic_inc_uint(&cmg->ref_cnt);
589 cmg->state = NS_CONN_MGMT_DETACHED;
594 (void) mutex_unlock(&cmg->lock);
607 ns_conn_mgmt_t *cmg = ns_connmgmt;
612 if (cmg == NULL || checked_pid != mypid) {
619 if (cmg == NULL || cmg->pid != mypid) {
620 if (cmg != NULL) {
630 ns_connmgmt_parent = cmg;
639 cmg = ns_connmgmt;
645 atomic_inc_uint(&cmg->ref_cnt);
649 return (cmg);
655 ns_conn_mgmt_t *cmg = NULL;
672 cmg = ns_connmgmt;
677 return (cmg);
685 * the previous cmg (cmg_prev) will be freed later
691 cmg = get_current_conn_mgmt(op);
692 if (cmg == NULL) {
697 atomic_inc_uint(&cmg->ref_cnt);
700 cmg = cmg_prev;
702 if (cmg->config == NULL)
703 cmg->config = __s_api_get_default_config();
707 return (cmg);
714 free_conn_mgmt(ns_conn_mgmt_t *cmg)
726 if (cmg == NULL)
728 cookie = cmg->cfg_cookie;
730 __s_api_free2dArray(cmg->pservers);
732 if (cmg->config != NULL) {
733 if (cmg->state == NS_CONN_MGMT_DETACHED)
734 __s_api_destroy_config(cmg->config);
736 __s_api_release_config(cmg->config);
740 if (cmg->procchg_started == B_TRUE) {
741 if (cmg->procchg_tid != thr_self()) {
742 if (cmg->procchg_door_call == B_TRUE) {
762 (void) pthread_cancel(cmg->procchg_tid);
763 cmg->procchg_started = B_FALSE;
767 free(cmg);
771 release_conn_mgmt(ns_conn_mgmt_t *cmg, boolean_t unlock_cmg)
773 if (cmg == NULL)
775 if (atomic_dec_uint_nv(&cmg->ref_cnt) == 0) {
776 if (cmg->state == NS_CONN_MGMT_DETACHED) {
778 (void) mutex_unlock(&cmg->lock);
779 free_conn_mgmt(cmg);
786 " is not DETACHED (%d)"), cmg->state);
787 cmg = NULL;
790 return (cmg);
817 ns_conn_mgmt_t *cmg;
822 cmg = access_conn_mgmt(NS_CONN_MGMT_OP_REF);
823 if (cmg == NULL)
826 if (cmg->state != NS_CONN_MGMT_ACTIVE &&
827 cmg->state != NS_CONN_MGMT_INACTIVE) {
828 atomic_dec_uint(&cmg->ref_cnt);
834 atomic_dec_uint(&cmg->ref_cnt);
844 cu->conn_mgmt = cmg;
846 (void) conn_tsd_setup(cmg);
862 ns_conn_mgmt_t *cmg;
871 cmg = cu->conn_mgmt;
873 (void) release_conn_mgmt(cmg, B_FALSE);
885 init_conn_mt(ns_conn_mgmt_t *cmg, ns_ldap_error_t **ep)
898 if (cmg_a != cmg) {
916 cm->conn_mgmt = cmg;
924 * cmg needs to be unlocked or not.
929 ns_conn_mgmt_t *cmg;
940 cmg = cm->conn_mgmt;
942 return (release_conn_mgmt(cmg, unlock_cmg));
962 add_cm2cmg(ns_conn_mt_t *cm, ns_conn_mgmt_t *cmg)
970 if (cmg->cm_head == NULL) {
971 cmg->cm_head = cm;
972 cmg->cm_tail = cm;
975 cm->next = cmg->cm_head;
976 cmg->cm_head = cm;
978 cmg->cm_tail->next = cm;
979 cmg->cm_tail = cm;
982 cmg->cm_cnt++;
1032 del_cm4cmg(ns_conn_mt_t *cm, ns_conn_mgmt_t *cmg)
1036 if (cm == NULL || cmg->cm_head == NULL || cmg->cm_cnt == 0)
1040 if (cmg->cm_head == cmg->cm_tail) {
1041 if (cm == cmg->cm_head) {
1042 cmg->cm_head = cmg->cm_tail = NULL;
1043 cmg->cm_cnt = 0;
1050 if (cm == cmg->cm_head) {
1051 cmg->cm_head = cm->next;
1052 cmg->cm_cnt--;
1057 pm = cmg->cm_head;
1058 for (m = cmg->cm_head->next; m; m = m->next) {
1063 if (pm != cmg->cm_tail) {
1066 cmg->cm_tail = pm;
1067 cmg->cm_cnt--;
1147 * This function assumes conn_mgmt cmg and conn_mt *cm are locked.
1150 check_and_close_conn(ns_conn_mgmt_t *cmg, ns_conn_mt_t **cm,
1164 if (cmg->pservers_loaded == B_FALSE)
1165 get_preferred_servers(B_FALSE, B_FALSE, cmg);
1166 if (cmg->pservers == NULL)
1182 for (j = 0; cmg->pservers[j] != NULL; j++) {
1183 if (strcasecmp(sinfo.server, cmg->pservers[j]) != 0)
1192 for (j = 0; cmg->pservers[j] != NULL; j++) {
1193 if (strcasecmp(cmg->pservers[j], (*cm)->conn->serverAddr) != 0)
1234 if (cmg->shutting_down == B_FALSE)
1242 if (cmg->shutting_down == B_FALSE)
1275 ns_conn_mgmt_t *cmg = cm->conn_mgmt;
1343 cmg->is_nscd == B_FALSE && !__s_api_isStandalone()) {
1344 drop_conn = check_and_close_conn(cmg, &cm, cu);
1388 ns_conn_mgmt_t *cmg;
1394 cmg = cu->conn_mgmt;
1413 if (!((cmg->state == NS_CONN_MGMT_INACTIVE &&
1414 cu->keep_conn == B_TRUE) || cmg->state == NS_CONN_MGMT_ACTIVE))
1420 NS_CONN_CHECK_ABORT_AND_LOCK(cmg, cu, errorp);
1426 for (cn = cmg->cm_head; cn; cn = cn->next) {
1450 (void) mutex_unlock(&cmg->lock);
1484 /* cmg->lock unlocked by wait_for_conn_mt() */
1494 /* cmg->lock unlocked by wait_for_conn_mt() */
1505 cn = init_conn_mt(cmg, errorp);
1507 (void) mutex_unlock(&cmg->lock);
1513 if (cmg->ldap_mt == B_TRUE)
1517 add_cm2cmg(cn, cmg);
1518 (void) mutex_unlock(&cmg->lock);
1536 ns_conn_mgmt_t *cmg = cu->conn_mgmt;
1540 NS_CONN_CHECK_ABORT_AND_LOCK(cmg, cu, ep);
1547 if (cmg->procchg_started == B_FALSE && cmg->is_nscd == B_TRUE) {
1548 start_thread(cmg);
1549 cmg->procchg_started = B_TRUE;
1561 if (cmg->ldap_mt == B_TRUE)
1570 (void) mutex_unlock(&cmg->lock);
1586 ns_conn_mgmt_t *cmg;
1593 cmg = cu->conn_mgmt;
1609 (void) mutex_lock(&cmg->lock);
1611 del_cm4cmg(cm, cmg);
1613 NS_CONN_UNLOCK_AND_FREE(ns_conn_free, cm, cmg);
1693 ns_conn_mgmt_t *cmg;
1701 cmg = cu->conn_mgmt;
1703 (void) mutex_lock(&cmg->lock);
1723 del_cm4cmg(cm, cmg);
1727 NS_CONN_UNLOCK_AND_FREE(free_cm, cm, cmg);
1739 ns_conn_mgmt_t *cmg;
1745 cmg = cu->conn_mgmt;
1746 rc = setup_mt_ld(ld, cmg);
1748 if (cmg->do_mt_conn == B_FALSE) {
1751 * if cmg is usable, cmg->lock will be locked. Otherwise,
1754 NS_CONN_CHECK_ABORT_AND_LOCK(cmg, cu, ep);
1755 if (cmg->do_mt_conn == B_FALSE) {
1757 cmg->ldap_mt = B_FALSE;
1759 cmg->ldap_mt = B_TRUE;
1760 if (cmg->is_nscd == B_TRUE ||
1761 cmg->is_peruser_nscd == B_TRUE) {
1762 cmg->do_mt_conn = B_TRUE;
1763 cmg->state = NS_CONN_MGMT_ACTIVE;
1767 (void) mutex_unlock(&cmg->lock);
1784 ns_conn_mgmt_t *cmg = cm->conn_mgmt;
1789 NS_CONN_MT_CLOSING) || cmg->cm_head == NULL || cmg->cm_cnt == 0)
1793 for (m = cmg->cm_head; m; m = m->next) {
1822 if (cmg->shutting_down == B_FALSE)
1831 del_cm4cmg(cm, cmg);
1854 ns_conn_mgmt_t *cmg;
1863 cmg = cu->conn_mgmt;
1865 (void) mutex_lock(&cmg->lock);
1872 (void) mutex_unlock(&cmg->lock);
1886 if (cmg->shutting_down == B_FALSE)
1888 NS_CONN_UNLOCK_AND_FREE(free_cm, cm, cmg);
1900 ns_conn_mgmt_t *cmg;
1906 cmg = cm->conn_mgmt;
1915 (void) mutex_lock(&cmg->lock);
1922 (void) mutex_unlock(&cmg->lock);
1927 NS_CONN_UNLOCK_AND_FREE(free_cm, cm, cmg);
1958 get_preferred_servers(boolean_t lock, boolean_t reload, ns_conn_mgmt_t *cmg)
1964 (void) mutex_lock(&cmg->lock);
1967 if (cmg->pservers_loaded == B_TRUE && reload == B_FALSE)
1970 if (cmg->pservers != NULL) {
1971 (void) __ns_ldap_freeParam((void ***)&cmg->pservers);
1972 cmg->pservers = NULL;
1977 cmg->pservers = (char **)pservers;
1978 cmg->pservers_loaded = B_TRUE;
1990 proc_server_change(ns_server_status_change_t *chg, ns_conn_mgmt_t *cmg)
2012 return (cmg);
2027 (void) mutex_lock(&cmg->lock);
2030 for (cm = cmg->cm_head; cm; cm = cm->next) {
2043 (void) mutex_unlock(&cmg->lock);
2070 B_FALSE, cmg);
2076 if (cmg->pservers == NULL) {
2077 (void) mutex_unlock(&cmg->lock);
2078 return (cmg);
2097 (void) mutex_lock(&cmg->lock);
2103 for (j = 0; cmg->pservers[j] != NULL; j++) {
2104 if (strcasecmp(cmg->pservers[j],
2117 for (cm = cmg->cm_head; cm; cm = cm->next) {
2142 cmg->pservers[j]) == 0) {
2159 cm, cmg);
2180 (void) mutex_unlock(&cmg->lock);
2181 return (cmg);
2186 shutdown_all_conn_mt(ns_conn_mgmt_t *cmg)
2199 (void) mutex_lock(&cmg->lock);
2200 while (cmg->cm_head != NULL && done == B_FALSE) {
2201 for (cm = cmg->cm_head; cm; cm = cm->next) {
2218 (void) mutex_unlock(&cmg->lock);
2226 ns_conn_mgmt_t *cmg;
2228 cmg = access_conn_mgmt(NS_CONN_MGMT_OP_SHUTDOWN);
2229 if (cmg == NULL) /* already being SHUT done */
2232 (void) shutdown_all_conn_mt(cmg);
2233 (void) release_conn_mgmt(cmg, B_FALSE);
2236 (void) release_conn_mgmt(cmg, B_FALSE);
2247 ns_conn_mgmt_t *cmg;
2250 cmg = access_conn_mgmt(NS_CONN_MGMT_OP_REF);
2251 if (cmg == NULL)
2253 if (cmg->config == new_cfg || cmg->state == NS_CONN_MGMT_DETACHED) {
2254 (void) release_conn_mgmt(cmg, B_FALSE);
2260 if (ocmg == cmg)
2267 (void) release_conn_mgmt(cmg, B_FALSE);
2286 ns_conn_mgmt_t *cmg;
2295 cmg = cu->conn_mgmt;
2299 if (cmg != NULL && cmg->cfg_reloaded == B_TRUE)
2335 ns_conn_mgmt_t *cmg;
2341 if (cu->conn_mt != NULL && (cmg = cu->conn_mgmt) != NULL) {
2351 rc = conn_tsd_check(cmg);
2433 ns_conn_mgmt_t *cmg;
2440 cmg = access_conn_mgmt(NS_CONN_MGMT_OP_REF);
2441 if (cmg != ocmg)
2443 /* cmg is locked before called */
2444 cmg->procchg_tid = thr_self();
2447 (void) conn_tsd_setup(cmg);
2448 cookie = cmg->cfg_cookie;
2467 if (cmg == NULL || cmg->state == NS_CONN_MGMT_DETACHED ||
2470 if (cmg != NULL) {
2471 cmg->procchg_started = B_FALSE;
2472 (void) release_conn_mgmt(cmg, B_FALSE);
2489 cmg->procchg_door_call = B_TRUE;
2490 if (release_conn_mgmt(cmg, B_FALSE) == NULL) {
2503 cmg = access_conn_mgmt(NS_CONN_MGMT_OP_REF);
2504 if (cmg != NULL)
2505 cmg->procchg_door_call = B_FALSE;
2506 if (cmg != ocmg) {
2507 if (cmg != NULL) {
2508 cmg->procchg_started = B_FALSE;
2509 (void) release_conn_mgmt(cmg, B_FALSE);
2538 cmg = proc_server_change(&chg, cmg);
2552 cmg = proc_server_change(&chg, cmg);
2609 cmg = proc_server_change(&chg, cmg);
2619 start_thread(ns_conn_mgmt_t *cmg) {
2627 (void *)cmg, THR_DETACHED, NULL) != 0) {