[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: Bugfix: wait4msg() hangs when using SSL/TLS (ITS#446)



Howard Chu wrote:

> I have a question about this patch - you call ldap_free_connection when
> try_read1msg returns something meaningful. This doesn't make sense to me, it
> appears that you only expect to use 1 request/response per connection. ??

try_read1msg() calls ldap_free_connection() under some circumstances. I want to
ensure that the lc is not actually free'd until after the while
(try_read1msg()) loop in order to avoid fireworks.  I believe this is achieved
by incrementing the connection ref_cnt before calling try_read1msg() and then
calling ldap_free_connection() to even up the balance.

Perhaps it needs some comments....

    /* stop lc from being free'd within the while loop */
    ++lc->lconn_refcnt;

   /* read messages until the desired message is found or no more data on
connection */
   while ( (rc = try_read1msg( ld, msgid, all, lc->lconn_sb, lc, result )) ==
-2)    /* lc could go away */
        ;       /* nothing */

    /* decrement lc->lconn_refcnt above. Note: lc may get free'd */
    ldap_free_connection(ld, lc, 0, 1);

-Andrew.