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