Bug #9599
Fiddle::Function#call leaks memory
Description
Fiddle::Function#call
seems leaking memory.
With the following code:
# fiddle-memleak.rb
require 'fiddle'
n = 10
a = ["a"] * n
f = Fiddle::Function.new(Fiddle.dlopen(nil)["rb_obj_tainted"], [Fiddle::TYPE_VOIDP]*n, Fiddle::TYPE_VOID)
loop {f.call(*a); GC.start}
VSZ and RSS increase continuaslly.
$ ruby fiddle-memleak.rb & while ps -ovsz=,rss= $!; do sleep 1; done [1] 93595 2423344 24 2461024 8884 2463072 10420 2464096 11940 2465120 13428 2467168 14948 2468192 16476 2469216 17980 2471264 19432 2473312 20940 2474336 22424 2475360 23936 2478432 25468 2481504 26996 2482528 28468 2483552 29984 2485600 31524 2486624 33056 2487652 34568 2488676 36100 2490724 37628 2491748 39152
RGenGC seems unrelated since the result in 2.0.0 is similar.
Associated revisions
ext/dl, ext/fiddle: fix memory leak
- ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free), ext/fiddle/handle.c (fiddle_handle_free), ext/fiddle/pointer.c (fiddle_ptr_free): fix memory leak. based on the patch Heesob Park at [Bug #9599].
ext/dl, ext/fiddle: fix memory leak
- ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free), ext/fiddle/handle.c (fiddle_handle_free), ext/fiddle/pointer.c (fiddle_ptr_free): fix memory leak. based on the patch Heesob Park at [Bug #9599].
ext/dl, ext/fiddle: fix memory leak
- ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free), ext/fiddle/handle.c (fiddle_handle_free), ext/fiddle/pointer.c (fiddle_ptr_free): fix memory leak. based on the patch Heesob Park at [Bug #9599].
ext/dl, ext/fiddle: fix memory leak
- ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free), ext/fiddle/handle.c (fiddle_handle_free), ext/fiddle/pointer.c (fiddle_ptr_free): fix memory leak. based on the patch Heesob Park at [Bug #9599].
ext/dl, ext/fiddle: fix memory leak
- ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free), ext/fiddle/handle.c (fiddle_handle_free), ext/fiddle/pointer.c (fiddle_ptr_free): fix memory leak. based on the patch Heesob Park at [Bug #9599].
merge revision(s) r45298: [Backport #9599]
test/ruby/envutil.rb: compare RSS to check memory leak * test/ruby/envutil.rb (Test::Test#assert_no_memory_leak): compare
also RSS if available.
* test/ruby/memory_status.rb (Memory::Status.parse): read string
form of an instance.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@45372 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
merge revision(s) r45291,r45299,r45314,r45325: [Backport #9518]
* ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free), ext/fiddle/handle.c (fiddle_handle_free), ext/fiddle/pointer.c (fiddle_ptr_free): fix memory leak. based on the patch Heesob Park at [Bug #9599].
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45820 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
merge revision(s) 45291,45299,45314,45325: [Backport #9599]
* ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free), ext/fiddle/handle.c (fiddle_handle_free), ext/fiddle/pointer.c (fiddle_ptr_free): fix memory leak. based on the patch Heesob Park at [Bug #9599].
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@46508 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
merge revision(s) 45291,45299,45314,45325: [Backport #9599]
* ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free), ext/fiddle/handle.c (fiddle_handle_free), ext/fiddle/pointer.c (fiddle_ptr_free): fix memory leak. based on the patch Heesob Park at [Bug #9599].
History
#1
[ruby-dev:48021]
Updated by phasis68 (Heesob Park) about 4 years ago
Because Fiddle::Pointer class was alloced with TypedData_Make_Struct macro, it must be freed with ruby_xfree.
Same applies to ext/fiddle/handle.c, ext/dl/cptr.c and ext/dl/handle.c
Here is a patch.
diff --git a/pointer.c b/pointer.c
index 0a914dd..99c7596 100644
--- a/pointer.c
+++ b/pointer.c
@@ -65,6 +65,7 @@ fiddle_ptr_free(void ptr)
((data->free))(data->ptr);
}
}
- ruby_xfree(ptr); }
static size_t
#2
[ruby-dev:48023]
Updated by nobu (Nobuyoshi Nakada) about 4 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
#3
[ruby-dev:48025]
Updated by nagachika (Tomoyuki Chikanaga) about 4 years ago
- Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN to 1.9.3: UNKNOWN, 2.0.0: REQUIRED, 2.1: REQUIRED
#4
[ruby-dev:48028]
Updated by nagachika (Tomoyuki Chikanaga) about 4 years ago
Add r45301
#5
[ruby-dev:48061]
Updated by nagachika (Tomoyuki Chikanaga) about 4 years ago
#6
[ruby-dev:48066]
Updated by nagachika (Tomoyuki Chikanaga) about 4 years ago
#7
[ruby-dev:48171]
Updated by nagachika (Tomoyuki Chikanaga) almost 4 years ago
- Backport changed from 1.9.3: UNKNOWN, 2.0.0: REQUIRED, 2.1: REQUIRED to 1.9.3: UNKNOWN, 2.0.0: REQUIRED, 2.1: DONE
#8
[ruby-dev:48315]
Updated by usa (Usaku NAKAMURA) almost 4 years ago
backported into ruby_2_0_0 at r46508.
#9
[ruby-dev:48316]
Updated by usa (Usaku NAKAMURA) almost 4 years ago
- Backport changed from 1.9.3: UNKNOWN, 2.0.0: REQUIRED, 2.1: DONE to 1.9.3: UNKNOWN, 2.0.0: DONE, 2.1: DONE
ext/dl, ext/fiddle: fix memory leak
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45291 b2dd03c8-39d4-4d8f-98ff-823fe69b080e