e$BIMCO$H$$$$$^$9!#e(B
yarvtest/runner.rb e$B$,e(B valgrind e$B$KE$i$l$k$h$&$J$N$Ge(B
e$B=$@5$7$F$$^$7$?!#0J2<$G:F8=$9$k$$?$$$G$9!#e(B
% cat leak.rb
val = ‘$(RUBY_SO_NAME)-static.a’
val.gsub!(/RUBY_SO_NAME/, ‘h’)
% valgrind --leak-check=full ./ruby1.9 leak.rb
Index: string.c
— string.c (revision 18321)
+++ string.c (working copy)
@@ -617,6 +617,9 @@
cr = ENC_CODERANGE(str2);
rb_str_modify(str);
if (OBJ_TAINTED(str2)) OBJ_TAINT(str);
- if (!STR_SHARED_P(str) && !STR_EMBED_P(str)) {
- xfree(RSTRING_PTR(str));
- }
if (RSTRING_LEN(str2) <= RSTRING_EMBED_LEN_MAX) {
STR_SET_EMBED(str);
memcpy(RSTRING_PTR(str), RSTRING_PTR(str2), RSTRING_LEN(str2)+1);
@@ -625,9 +628,6 @@
ENC_CODERANGE_SET(str, cr);
return;
}
- if (!STR_SHARED_P(str) && !STR_EMBED_P(str)) {
- xfree(RSTRING_PTR(str));
- }
STR_SET_NOEMBED(str);
STR_UNSET_NOCAPA(str);
RSTRING(str)->as.heap.ptr = RSTRING_PTR(str2);