From 67d4b3f2054ee30d0329f82212078e9a243393de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Fri, 5 Mar 2010 22:30:21 +0000 Subject: [PATCH] Always call ff_network_init/ff_network_close when opening protocols ff_network_init is a no-op on all platforms except windows, and on windows the performance penalty is minimal (less than 1 ms in my tests). Originally committed as revision 22224 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/avio.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/libavformat/avio.c b/libavformat/avio.c index ec427deea3..1371722cfc 100644 --- a/libavformat/avio.c +++ b/libavformat/avio.c @@ -26,6 +26,9 @@ #include "libavcodec/opt.h" #include "os_support.h" #include "avformat.h" +#if CONFIG_NETWORK +#include "network.h" +#endif #if LIBAVFORMAT_VERSION_MAJOR >= 53 /** @name Logging context. */ @@ -76,6 +79,10 @@ int url_open_protocol (URLContext **puc, struct URLProtocol *up, URLContext *uc; int err; +#if CONFIG_NETWORK + if (!ff_network_init()) + return AVERROR(EIO); +#endif uc = av_mallocz(sizeof(URLContext) + strlen(filename) + 1); if (!uc) { err = AVERROR(ENOMEM); @@ -93,8 +100,7 @@ int url_open_protocol (URLContext **puc, struct URLProtocol *up, err = up->url_open(uc, filename, flags); if (err < 0) { av_free(uc); - *puc = NULL; - return err; + goto fail; } //We must be careful here as url_seek() could be slow, for example for http @@ -106,6 +112,9 @@ int url_open_protocol (URLContext **puc, struct URLProtocol *up, return 0; fail: *puc = NULL; +#if CONFIG_NETWORK + ff_network_close(); +#endif return err; } @@ -204,6 +213,9 @@ int url_close(URLContext *h) if (h->prot->url_close) ret = h->prot->url_close(h); +#if CONFIG_NETWORK + ff_network_close(); +#endif av_free(h); return ret; }