On Thu, 21 May 2015 16:09:00 +0300
Martin Storsjö <[email protected]> wrote:

> Since the underlying URLContext read functions are used,
> they handle interruption, without having to handle it at
> this level.
> ---
>  libavformat/tls.c | 35 +++++++++++------------------------
>  1 file changed, 11 insertions(+), 24 deletions(-)
> 
> diff --git a/libavformat/tls.c b/libavformat/tls.c
> index 7a08e1d..f768653 100644
> --- a/libavformat/tls.c
> +++ b/libavformat/tls.c
> @@ -44,10 +44,9 @@ static ssize_t gnutls_url_pull(gnutls_transport_ptr_t 
> transport,
>      int ret = ffurl_read(h, buf, len);
>      if (ret >= 0)
>          return ret;
> -    if (ret == AVERROR(EAGAIN))
> -        errno = EAGAIN;
> -    else
> -        errno = EIO;
> +    if (ret == AVERROR_EXIT)
> +        return 0;
> +    errno = EIO;
>      return -1;
>  }
>  static ssize_t gnutls_url_push(gnutls_transport_ptr_t transport,
> @@ -57,10 +56,9 @@ static ssize_t gnutls_url_push(gnutls_transport_ptr_t 
> transport,
>      int ret = ffurl_write(h, buf, len);
>      if (ret >= 0)
>          return ret;
> -    if (ret == AVERROR(EAGAIN))
> -        errno = EAGAIN;
> -    else
> -        errno = EIO;
> +    if (ret == AVERROR_EXIT)
> +        return 0;
> +    errno = EIO;
>      return -1;
>  }
>  #elif CONFIG_OPENSSL
> @@ -97,8 +95,8 @@ static int url_bio_bread(BIO *b, char *buf, int len)
>      if (ret >= 0)
>          return ret;
>      BIO_clear_retry_flags(b);
> -    if (ret == AVERROR(EAGAIN))
> -        BIO_set_retry_read(b);
> +    if (ret == AVERROR_EXIT)
> +        return 0;
>      return -1;
>  }
>  
> @@ -109,8 +107,8 @@ static int url_bio_bwrite(BIO *b, const char *buf, int 
> len)
>      if (ret >= 0)
>          return ret;
>      BIO_clear_retry_flags(b);
> -    if (ret == AVERROR(EAGAIN))
> -        BIO_set_retry_write(b);
> +    if (ret == AVERROR_EXIT)
> +        return 0;
>      return -1;
>  }
>  
> @@ -216,16 +214,7 @@ static int do_tls_poll(URLContext *h, int ret)
>          return AVERROR(EIO);
>      }
>  #endif
> -    if (h->flags & AVIO_FLAG_NONBLOCK)
> -        return AVERROR(EAGAIN);
> -    while (1) {
> -        int n = poll(&p, 1, 100);
> -        if (n > 0)
> -            break;
> -        if (ff_check_interrupt(&h->interrupt_callback))
> -            return AVERROR(EINTR);
> -    }
> -    return 0;
> +    return AVERROR(EIO);
>  }
>  
>  static int tls_open(URLContext *h, const char *uri, int flags, AVDictionary 
> **options)
> @@ -314,7 +303,6 @@ static int tls_open(URLContext *h, const char *uri, int 
> flags, AVDictionary **op
>          }
>      }
>      gnutls_credentials_set(c->session, GNUTLS_CRD_CERTIFICATE, c->cred);
> -    c->tcp->flags |= AVIO_FLAG_NONBLOCK;
>      gnutls_transport_set_lowat(c->session, 0);
>      gnutls_transport_set_pull_function(c->session, gnutls_url_pull);
>      gnutls_transport_set_push_function(c->session, gnutls_url_push);
> @@ -392,7 +380,6 @@ static int tls_open(URLContext *h, const char *uri, int 
> flags, AVDictionary **op
>          goto fail;
>      }
>      bio = BIO_new(&url_bio_method);
> -    c->tcp->flags |= AVIO_FLAG_NONBLOCK;
>      bio->ptr = c->tcp;
>      SSL_set_bio(c->ssl, bio, bio);
>      if (!c->listen && !numerichost)

Seems fine.
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to