X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Ftls_gnutls.c;h=0c4ef34f5fc60fcc6edae4782332d9bf0ca908b3;hb=2a19232c1996fee52a3f4201fa379001627dcc89;hp=e3c43683be57a9b9a31062227946c6d7e2ee592e;hpb=fbd607dd560afe44c3b90de1e6cbe5265cac8f1e;p=ffmpeg diff --git a/libavformat/tls_gnutls.c b/libavformat/tls_gnutls.c index e3c43683be5..0c4ef34f5fc 100644 --- a/libavformat/tls_gnutls.c +++ b/libavformat/tls_gnutls.c @@ -100,8 +100,7 @@ static int tls_close(URLContext *h) gnutls_deinit(c->session); if (c->cred) gnutls_certificate_free_credentials(c->cred); - if (c->tls_shared.tcp) - ffurl_close(c->tls_shared.tcp); + ffurl_closep(&c->tls_shared.tcp); ff_gnutls_deinit(); return 0; } @@ -182,11 +181,18 @@ static int tls_open(URLContext *h, const char *uri, int flags, AVDictionary **op gnutls_transport_set_push_function(p->session, gnutls_url_push); gnutls_transport_set_ptr(p->session, c->tcp); gnutls_priority_set_direct(p->session, "NORMAL", NULL); - ret = gnutls_handshake(p->session); - if (ret) { - ret = print_tls_error(h, ret); - goto fail; - } + do { + if (ff_check_interrupt(&h->interrupt_callback)) { + ret = AVERROR_EXIT; + goto fail; + } + + ret = gnutls_handshake(p->session); + if (gnutls_error_is_fatal(ret)) { + ret = print_tls_error(h, ret); + goto fail; + } + } while (ret); p->need_shutdown = 1; if (c->verify) { unsigned int status, cert_list_size;