Commit e6c13819 authored by Ronald S. Bultje's avatar Ronald S. Bultje

Fix memleak on some OSes in case network initialization fails. See

"[PATCH] tcp.c/udp.c memleak?" for discussion.

Originally committed as revision 14923 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent ad33bfef
...@@ -41,6 +41,9 @@ static int tcp_open(URLContext *h, const char *uri, int flags) ...@@ -41,6 +41,9 @@ static int tcp_open(URLContext *h, const char *uri, int flags)
socklen_t optlen; socklen_t optlen;
char proto[1024],path[1024],tmp[1024]; char proto[1024],path[1024],tmp[1024];
if(!ff_network_init())
return AVERROR(EIO);
url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname), url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname),
&port, path, sizeof(path), uri); &port, path, sizeof(path), uri);
if (strcmp(proto,"tcp")) goto fail; if (strcmp(proto,"tcp")) goto fail;
...@@ -55,9 +58,6 @@ static int tcp_open(URLContext *h, const char *uri, int flags) ...@@ -55,9 +58,6 @@ static int tcp_open(URLContext *h, const char *uri, int flags)
if (port <= 0 || port >= 65536) if (port <= 0 || port >= 65536)
goto fail; goto fail;
if(!ff_network_init())
return AVERROR(EIO);
dest_addr.sin_family = AF_INET; dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(port); dest_addr.sin_port = htons(port);
if (resolve_host(&dest_addr.sin_addr, hostname) < 0) if (resolve_host(&dest_addr.sin_addr, hostname) < 0)
......
...@@ -348,6 +348,9 @@ static int udp_open(URLContext *h, const char *uri, int flags) ...@@ -348,6 +348,9 @@ static int udp_open(URLContext *h, const char *uri, int flags)
is_output = (flags & URL_WRONLY); is_output = (flags & URL_WRONLY);
if(!ff_network_init())
return AVERROR(EIO);
s = av_mallocz(sizeof(UDPContext)); s = av_mallocz(sizeof(UDPContext));
if (!s) if (!s)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
...@@ -380,9 +383,6 @@ static int udp_open(URLContext *h, const char *uri, int flags) ...@@ -380,9 +383,6 @@ static int udp_open(URLContext *h, const char *uri, int flags)
udp_set_remote_url(h, uri); udp_set_remote_url(h, uri);
} }
if(!ff_network_init())
return AVERROR(EIO);
if (s->is_multicast && !(h->flags & URL_WRONLY)) if (s->is_multicast && !(h->flags & URL_WRONLY))
s->local_port = port; s->local_port = port;
udp_fd = udp_socket_create(s, &my_addr, &len); udp_fd = udp_socket_create(s, &my_addr, &len);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment