On 2014-11-11 11:34, Yousong Zhou wrote: > ustream_ssl_check_conn() may be called by .notify_write while a previous > SSL_connect() is still in process. This can happen because the > .notify_write callback will may be triggered by writes in the BIO > methods. > > Signed-off-by: Yousong Zhou <[email protected]> > --- > ustream-ssl.c | 19 +++++++++++++++---- > ustream-ssl.h | 1 + > 2 files changed, 16 insertions(+), 4 deletions(-) > > diff --git a/ustream-ssl.c b/ustream-ssl.c > index dd0faf9..84104b0 100644 > --- a/ustream-ssl.c > +++ b/ustream-ssl.c > @@ -34,12 +34,22 @@ static void ustream_ssl_error_cb(struct uloop_timeout *t) > us->notify_error(us, error, __ustream_ssl_strerror(us->error, > buffer, sizeof(buffer))); > } > > +static enum ssl_conn_status ustream_ssl_do_connect(struct ustream_ssl *us) > +{ > + enum ssl_conn_status status; > + > + us->connecting = true; > + status = __ustream_ssl_connect(us); > + us->connecting = false; > + return status; > +} > + I think this can be fixed in a much simpler way. Simply prevent re-entrant calls to __ustream_ssl_connect through a static variable. The other checks for us->connecting should be unnecessary, I think !us->connected is enough.
- Felix _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
