]> git.sur5r.net Git - openldap/commitdiff
ITS#2982 ok, we should NULL out lc after all...
authorHoward Chu <hyc@openldap.org>
Thu, 25 Mar 2004 12:15:52 +0000 (12:15 +0000)
committerHoward Chu <hyc@openldap.org>
Thu, 25 Mar 2004 12:15:52 +0000 (12:15 +0000)
libraries/libldap/result.c

index 42e758d053a10048bd3b93187d1b46c600fb6a48..dbf75ee1409054ac813619cb78f4f097a0110f33 100644 (file)
@@ -73,7 +73,7 @@ static int ldap_mark_abandoned LDAP_P(( LDAP *ld, ber_int_t msgid ));
 static int wait4msg LDAP_P(( LDAP *ld, ber_int_t msgid, int all, struct timeval *timeout,
        LDAPMessage **result ));
 static ber_tag_t try_read1msg LDAP_P(( LDAP *ld, ber_int_t msgid,
-       int all, Sockbuf *sb, LDAPConn *lc, LDAPMessage **result ));
+       int all, Sockbuf *sb, LDAPConn **lc, LDAPMessage **result ));
 static ber_tag_t build_result_ber LDAP_P(( LDAP *ld, BerElement **bp, LDAPRequest *lr ));
 static void merge_error_info LDAP_P(( LDAP *ld, LDAPRequest *parentr, LDAPRequest *lr ));
 static LDAPMessage * chkResponseList LDAP_P(( LDAP *ld, int msgid, int all));
@@ -319,8 +319,8 @@ wait4msg(
                                nextlc = lc->lconn_next;
                                if ( ber_sockbuf_ctrl( lc->lconn_sb,
                                                LBER_SB_OPT_DATA_READY, NULL ) ) {
-                                           rc = try_read1msg( ld, msgid, all, lc->lconn_sb,
-                                               lc, result );
+                                       rc = try_read1msg( ld, msgid, all, lc->lconn_sb,
+                                               &lc, result );
                                    break;
                                }
                }
@@ -374,7 +374,8 @@ wait4msg(
                                                ldap_is_read_ready( ld,
                                                lc->lconn_sb )) {
                                                    rc = try_read1msg( ld, msgid, all,
-                                                       lc->lconn_sb, lc, result );
+                                                       lc->lconn_sb, &lc, result );
+                                                       if ( lc == NULL ) lc = nextlc;
                                            }
                                    }
                            }
@@ -410,7 +411,7 @@ try_read1msg(
        ber_int_t msgid,
        int all,
        Sockbuf *sb,
-       LDAPConn *lc,
+       LDAPConn **lcp,
        LDAPMessage **result )
 {
        BerElement      *ber;
@@ -420,6 +421,7 @@ try_read1msg(
        ber_len_t       len;
        int             foundit = 0;
        LDAPRequest     *lr, *tmplr;
+       LDAPConn        *lc;
        BerElement      tmpber;
        int             rc, refer_cnt, hadref, simple_request;
        ber_int_t       lderr;
@@ -433,7 +435,8 @@ try_read1msg(
        int     v3ref;
 
        assert( ld != NULL );
-       assert( lc != NULL );
+       assert( lcp != NULL );
+       assert( *lcp != NULL );
        
 #ifdef NEW_LOGGING
        LDAP_LOG ( OPERATION, ARGS, "read1msg: msgid %d, all %d\n", msgid, all, 0 );
@@ -441,6 +444,8 @@ try_read1msg(
        Debug( LDAP_DEBUG_TRACE, "read1msg: msgid %d, all %d\n", msgid, all, 0 );
 #endif
 
+       lc = *lcp;
+
 retry:
        if ( lc->lconn_ber == NULL ) {
                lc->lconn_ber = ldap_alloc_ber_with_options(ld);
@@ -816,6 +821,7 @@ lr->lr_res_matched ? lr->lr_res_matched : "" );
 
                        if ( lc != NULL ) {
                                ldap_free_connection( ld, lc, 0, 1 );
+                               *lcp = NULL;
                        }
                }
        }