# HG changeset patch # User mstorsjo # Date 1267828221 0 # Node ID 65b77d0674d02dc9726a8f683c15db2945f37d88 # Parent 2e5aecabfb1e77e9081e64fff92aa15c6c59cb34 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). diff -r 2e5aecabfb1e -r 65b77d0674d0 avio.c --- a/avio.c Fri Mar 05 17:26:34 2010 +0000 +++ b/avio.c Fri Mar 05 22:30:21 2010 +0000 @@ -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 @@ 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 @@ 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 @@ return 0; fail: *puc = NULL; +#if CONFIG_NETWORK + ff_network_close(); +#endif return err; } @@ -204,6 +213,9 @@ if (h->prot->url_close) ret = h->prot->url_close(h); +#if CONFIG_NETWORK + ff_network_close(); +#endif av_free(h); return ret; }