Lines Matching refs:mc
148 meta_back_print( metaconn_t *mc, char *avlstr )
153 for ( i = 0; i < mc->mc_info->mi_ntargets; i++ ) {
154 fputc( mc->mc_conns[ i ].msc_ld ? '*' : 'o', stderr);
158 fprintf( stderr, " mc=%p local=\"%s\" conn=%p refcnt=%d%s %s\n",
159 (void *)mc,
160 mc->mc_local_ndn.bv_val ? mc->mc_local_ndn.bv_val : "",
161 (void *)mc->mc_conn,
162 mc->mc_refcnt,
163 LDAP_BACK_CONN_TAINTED( mc ) ? " tainted" : "",
209 metaconn_t *mc;
213 LDAP_TAILQ_FOREACH( mc, &mi->mi_conn_priv[ c ].mic_priv, mc_q )
216 meta_back_print( mc, "" );
245 metaconn_t *mc;
251 mc = ( metaconn_t * )ch_calloc( 1, sizeof( metaconn_t )
253 if ( mc == NULL ) {
257 mc->mc_info = mi;
259 mc->mc_authz_target = META_BOUND_NONE;
260 mc->mc_refcnt = 1;
262 return mc;
274 metaconn_t *mc,
282 metasingleconn_t *msc = &mc->mc_conns[ candidate ];
285 int isauthz = ( candidate == mc->mc_authz_target );
572 meta_clear_one_candidate( op, mc, candidate );
646 meta_clear_one_candidate( op, mc, candidate );
712 metaconn_t *mc = *mcp;
713 metasingleconn_t *msc = &mc->mc_conns[ candidate ];
724 assert( mc->mc_refcnt > 0 );
725 if ( mc->mc_refcnt == 1 ) {
744 meta_clear_one_candidate( op, mc, candidate );
749 /* mc here must be the regular mc, reset and ready for init */
750 rc = meta_back_init_one_conn( op, rs, mc, candidate,
751 LDAP_BACK_CONN_ISPRIV( mc ), sendok, 0 );
810 if ( mc->mc_refcnt == 1 ) {
814 (void)meta_clear_one_candidate( op, mc, candidate );
817 LDAP_BACK_CONN_TAINTED_SET( mc );
822 meta_back_release_conn_lock( mi, mc, 0 );
831 if ( LDAP_BACK_PCONN_ISPRIV( mc ) ) {
832 if ( mc->mc_q.tqe_prev != NULL ) {
833 assert( LDAP_BACK_CONN_CACHED( mc ) );
834 assert( mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_num > 0 );
835 LDAP_TAILQ_REMOVE( &mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_priv,
836 mc, mc_q );
837 mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_num--;
838 LDAP_TAILQ_ENTRY_INIT( mc, mc_q );
841 assert( !LDAP_BACK_CONN_CACHED( mc ) );
847 ( caddr_t )mc, meta_back_conndnmc_cmp );
849 LDAP_BACK_CONN_CACHED_CLEAR( mc );
1032 metaconn_t *mc = NULL,
1091 LDAP_TAILQ_FOREACH( mc,
1095 if ( !LDAP_BACK_CONN_BINDING( mc ) && mc->mc_refcnt == 0 ) {
1100 if ( mc != NULL ) {
1102 if ( mc != LDAP_TAILQ_LAST( &mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_priv,
1105 LDAP_TAILQ_REMOVE( &mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_priv,
1106 mc, mc_q );
1107 LDAP_TAILQ_ENTRY_INIT( mc, mc_q );
1108 LDAP_TAILQ_INSERT_TAIL( &mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_priv,
1109 mc, mc_q );
1115 mc = LDAP_TAILQ_FIRST( &mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( &mc_curr ) ].mic_priv );
1120 mc = (metaconn_t *)ldap_tavl_find( mi->mi_conninfo.lai_tree,
1124 if ( mc ) {
1126 assert( !LDAP_BACK_CONN_TAINTED( mc ) );
1130 if ( LDAP_BACK_CONN_BINDING( mc ) ) {
1139 mc = NULL;
1142 if ( mc->mc_refcnt == 0 && (( mi->mi_conn_ttl != 0 && op->o_time > mc->mc_create_time + mi->mi_conn_ttl )
1143 || ( mi->mi_idle_timeout != 0 && op->o_time > mc->mc_time + mi->mi_idle_timeout )) )
1151 if ( LDAP_BACK_PCONN_ISPRIV( mc ) ) {
1152 if ( mc->mc_q.tqe_prev != NULL ) {
1153 assert( LDAP_BACK_CONN_CACHED( mc ) );
1154 assert( mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_num > 0 );
1155 LDAP_TAILQ_REMOVE( &mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_priv,
1156 mc, mc_q );
1157 mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_num--;
1158 LDAP_TAILQ_ENTRY_INIT( mc, mc_q );
1161 assert( !LDAP_BACK_CONN_CACHED( mc ) );
1166 (caddr_t)mc, meta_back_conndnmc_cmp );
1173 LDAP_BACK_CONN_TAINTED_SET( mc );
1174 LDAP_BACK_CONN_CACHED_CLEAR( mc );
1178 mi->mi_ldap_extra->connid2str( &mc->mc_base, buf, sizeof(buf) );
1181 "%s meta_back_getconn: mc=%p conn=%s expired (tainted).\n",
1182 op->o_log_prefix, (void *)mc, buf );
1186 mc->mc_refcnt++;
1239 if ( mc == NULL ) {
1241 mc = metaconn_alloc( op );
1242 mc->mc_conn = mc_curr.mc_conn;
1243 ber_dupbv( &mc->mc_local_ndn, &mc_curr.mc_local_ndn );
1246 LDAP_BACK_CONN_BINDING_SET( mc );
1249 LDAP_BACK_CONN_ISPRIV_SET( mc );
1252 LDAP_BACK_CONN_ISANON_SET( mc );
1257 * release mc and create a new one */
1266 rs, mc, i, LDAP_BACK_CONN_ISPRIV( &mc_curr ),
1270 LDAP_BACK_CONN_BINDING_SET( &mc->mc_conns[ i ] );
1290 mc->mc_refcnt = 0;
1291 meta_back_conn_free( mc );
1294 meta_back_release_conn( mi, mc );
1343 if ( mc != NULL ) {
1344 meta_back_release_conn( mi, mc );
1361 if ( mc != NULL ) {
1362 meta_back_release_conn( mi, mc );
1378 if ( mc == NULL ) {
1385 mc = (metaconn_t *)ldap_tavl_find( mi->mi_conninfo.lai_tree,
1387 if ( mc != NULL ) {
1389 assert( !LDAP_BACK_CONN_TAINTED( mc ) );
1392 if ( META_BACK_CONN_CREATING( &mc->mc_conns[ i ] )
1393 || LDAP_BACK_CONN_BINDING( &mc->mc_conns[ i ] ) )
1401 mc = NULL;
1404 mc->mc_refcnt++;
1411 if ( mc == NULL ) {
1413 mc = metaconn_alloc( op );
1414 mc->mc_conn = mc_curr.mc_conn;
1415 ber_dupbv( &mc->mc_local_ndn, &mc_curr.mc_local_ndn );
1418 LDAP_BACK_CONN_BINDING_SET( mc );
1421 LDAP_BACK_CONN_ISPRIV_SET( mc );
1424 LDAP_BACK_CONN_ISANON_SET( mc );
1435 msc = &mc->mc_conns[ i ];
1442 err = meta_back_init_one_conn( op, rs, mc, i,
1452 mc->mc_refcnt = 0;
1453 meta_back_conn_free( mc );
1456 meta_back_release_conn( mi, mc );
1462 LDAP_BACK_CONN_BINDING_SET( &mc->mc_conns[ i ] );
1479 if ( mc == NULL ) {
1481 mc = metaconn_alloc( op );
1482 mc->mc_conn = mc_curr.mc_conn;
1483 ber_dupbv( &mc->mc_local_ndn, &mc_curr.mc_local_ndn );
1486 LDAP_BACK_CONN_ISPRIV_SET( mc );
1489 LDAP_BACK_CONN_ISANON_SET( mc );
1507 int lerr = meta_back_init_one_conn( op, rs, mc, i,
1533 ( void )meta_clear_one_candidate( op, mc, i );
1552 mc->mc_refcnt = 0;
1553 meta_back_conn_free( mc );
1556 meta_back_release_conn( mi, mc );
1567 ( void )meta_clear_one_candidate( op, mc, i );
1574 mc->mc_refcnt = 0;
1575 meta_back_conn_free( mc );
1578 meta_back_release_conn( mi, mc );
1605 mc->mc_time = op->o_time;
1610 mc->mc_create_time = op->o_time;
1622 if ( LDAP_BACK_PCONN_ISPRIV( mc ) ) {
1623 if ( mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_num < mi->mi_conn_priv_max ) {
1624 LDAP_TAILQ_INSERT_TAIL( &mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_priv, mc, mc_q );
1625 mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_num++;
1626 LDAP_BACK_CONN_CACHED_SET( mc );
1629 LDAP_BACK_CONN_TAINTED_SET( mc );
1634 err = ldap_tavl_insert( &mi->mi_conninfo.lai_tree, ( caddr_t )mc,
1636 LDAP_BACK_CONN_CACHED_SET( mc );
1644 if ( !LDAP_BACK_PCONN_ISPRIV( mc ) ) {
1653 LDAP_BACK_CONN_CACHED_CLEAR( mc );
1656 mc->mc_refcnt = 0;
1657 meta_back_conn_free( mc );
1663 LDAP_BACK_CONN_TAINTED_SET( mc );
1667 LDAP_BACK_CONN_CACHED_CLEAR( mc );
1670 mi->mi_ldap_extra->connid2str( &mc->mc_base, buf, sizeof(buf) );
1677 mc->mc_refcnt = 0;
1678 meta_back_conn_free( mc );
1691 mi->mi_ldap_extra->connid2str( &mc->mc_base, buf, sizeof(buf) );
1701 mi->mi_ldap_extra->connid2str( &mc->mc_base, buf, sizeof(buf) );
1709 return mc;
1715 metaconn_t *mc,
1718 assert( mc != NULL );
1723 assert( mc->mc_refcnt > 0 );
1724 mc->mc_refcnt--;
1731 if ( LDAP_BACK_CONN_TAINTED( mc ) || !LDAP_BACK_CONN_CACHED( mc ) ) {
1736 if ( LDAP_BACK_PCONN_ISPRIV( mc ) ) {
1737 if ( mc->mc_q.tqe_prev != NULL ) {
1738 assert( LDAP_BACK_CONN_CACHED( mc ) );
1739 assert( mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_num > 0 );
1740 LDAP_TAILQ_REMOVE( &mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_priv, mc, mc_q );
1741 mi->mi_conn_priv[ LDAP_BACK_CONN2PRIV( mc ) ].mic_num--;
1742 LDAP_TAILQ_ENTRY_INIT( mc, mc_q );
1745 assert( !LDAP_BACK_CONN_CACHED( mc ) );
1748 } else if ( LDAP_BACK_CONN_CACHED( mc ) ) {
1752 ( caddr_t )mc, meta_back_conndnmc_cmp );
1755 assert( tmpmc == NULL || tmpmc == mc );
1758 LDAP_BACK_CONN_CACHED_CLEAR( mc );
1764 if ( mc->mc_refcnt == 0 ) {
1765 meta_back_conn_free( mc );
1766 mc = NULL;
1770 if ( mc != NULL && LDAP_BACK_CONN_BINDING( mc ) ) {
1771 LDAP_BACK_CONN_BINDING_CLEAR( mc );