summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--ext/socket/raddrinfo.c1
-rw-r--r--test/socket/test_addrinfo.rb11
3 files changed, 17 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index f1ca120733..1ac14ca3e2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu Apr 9 08:24:03 2015 Masahiro Tomita <tommy@tmtm.org>
+
+ * ext/socket/raddrinfo.c (addrinfo_mload): fix memory leak of
+ addrinfo. [ruby-dev:48923] [Bug #11051]
+
Wed Apr 8 17:45:02 2015 Shannon Skipper <shannonskipper@gmail.com>
* version.c (Init_version): the version of the engine or
diff --git a/ext/socket/raddrinfo.c b/ext/socket/raddrinfo.c
index ac36743b8a..caa08fea47 100644
--- a/ext/socket/raddrinfo.c
+++ b/ext/socket/raddrinfo.c
@@ -1643,6 +1643,7 @@ addrinfo_mload(VALUE self, VALUE ary)
len = res->ai->ai_addrlen;
memcpy(&ss, res->ai->ai_addr, res->ai->ai_addrlen);
+ rb_freeaddrinfo(res);
break;
}
}
diff --git a/test/socket/test_addrinfo.rb b/test/socket/test_addrinfo.rb
index 61b889ed26..1416553c9b 100644
--- a/test/socket/test_addrinfo.rb
+++ b/test/socket/test_addrinfo.rb
@@ -468,6 +468,17 @@ class TestSocketAddrinfo < Test::Unit::TestCase
assert_equal(ai1.canonname, ai2.canonname)
end
+ def test_marshal_memory_leak
+ bug11051 = '[ruby-dev:48923] [Bug #11051]'
+ assert_no_memory_leak(%w[-rsocket], <<-prep, <<-code, bug11051, rss: true, limit: 1.1)
+ d = Marshal.dump(Addrinfo.tcp("127.0.0.1", 80))
+ 1000.times {Marshal.load(d)}
+ prep
+ GC.start
+ 20_000.times {Marshal.load(d)}
+ code
+ end
+
if Socket.const_defined?("AF_INET6") && Socket::AF_INET6.is_a?(Integer)
def test_addrinfo_new_inet6