[#4076] Ruby/DL — Jamis Buck <jamis_buck@...>

I recently used Ruby/DL to create bindings to the SQLite3 embedded

40 messages 2005/01/03
[#4096] Re: Ruby/DL — Paul Brannan <pbrannan@...> 2005/01/04

On Tue, Jan 04, 2005 at 02:53:49AM +0900, Jamis Buck wrote:

[#4099] Re: Ruby/DL — ts <decoux@...> 2005/01/04

>>>>> "P" == Paul Brannan <pbrannan@atdesk.com> writes:

[#4119] Re: Ruby/DL — Paul Brannan <pbrannan@...> 2005/01/05

On Wed, Jan 05, 2005 at 03:05:48AM +0900, ts wrote:

[#4120] Re: Ruby/DL — ts <decoux@...> 2005/01/05

>>>>> "P" == Paul Brannan <pbrannan@atdesk.com> writes:

[#4125] Re: Ruby/DL — Paul Brannan <pbrannan@...> 2005/01/05

On Thu, Jan 06, 2005 at 01:10:34AM +0900, ts wrote:

[#4116] Test::Unit::Collector::Dir won't work with code that modifies $LOAD_PATH — Eric Hodel <drbrain@...7.net>

Any test code that depends upon modifications of $: fails when used

10 messages 2005/01/05

[#4146] The face of Unicode support in the future — Charles O Nutter <headius@...>

Hello Rubyists!

47 messages 2005/01/06
[#4152] Re: The face of Unicode support in the future — Yukihiro Matsumoto <matz@...> 2005/01/07

Hi,

[#4167] Re: The face of Unicode support in the future — Christian Neukirchen <chneukirchen@...> 2005/01/09

Yukihiro Matsumoto <matz@ruby-lang.org> writes:

[#4175] Re: The face of Unicode support in the future — Yukihiro Matsumoto <matz@...> 2005/01/10

Hi,

[#4186] Re: The face of Unicode support in the future — Paul Brannan <pbrannan@...> 2005/01/11

On Mon, Jan 10, 2005 at 11:53:48PM +0900, Yukihiro Matsumoto wrote:

[#4192] Re: The face of Unicode support in the future — Yukihiro Matsumoto <matz@...> 2005/01/12

Hi,

[#4269] Re: The face of Unicode support in the future — Wes Nakamura <wknaka@...>

19 messages 2005/01/18
[#4270] Re: The face of Unicode support in the future — Yukihiro Matsumoto <matz@...> 2005/01/18

Hi,

[#4275] Re: The face of Unicode support in the future — Wes Nakamura <wknaka@...> 2005/01/19

[#4323] test/unit doesn't rescue a Exception — Tanaka Akira <akr@...17n.org>

test/unit doesn't rescue a Exception in a test method, as follows.

14 messages 2005/01/27
[#8773] Re: test/unit doesn't rescue a Exception — Tanaka Akira <akr@...> 2006/09/02

In article <87is5jb46q.fsf@serein.a02.aist.go.jp>,

[#8776] Re: test/unit doesn't rescue a Exception — "Nathaniel Talbott" <ntalbott@...> 2006/09/03

On 9/1/06, Tanaka Akira <akr@fsij.org> wrote:

[#8777] Re: test/unit doesn't rescue a Exception — Eric Hodel <drbrain@...7.net> 2006/09/03

On Sep 2, 2006, at 6:34 PM, Nathaniel Talbott wrote:

Re: Ruby/DL

From: nobu.nokada@...
Date: 2005-01-10 13:53:12 UTC
List: ruby-core #4172
Hi,

At Mon, 10 Jan 2005 19:23:03 +0900,
ts wrote in [ruby-core:04171]:
> n> There are some kinds of callbacks, as mentioned in [ruby-core:04160].
> 
>  Well, I've no idea actually about this, but I want to know : it's
>  voluntary the memory leak in sym.c, or I'm wrong and it don't exist a
>  memory leak ?

Do you mean, in rb_dlsym_call(), the case that "to_ptr"
conversion failed, and that copied strings for 's' arguments
don't get freed?


Index: ext/dl/sym.c
===================================================================
RCS file: /cvs/ruby/src/ruby/ext/dl/sym.c,v
retrieving revision 1.27
diff -U2 -p -r1.27 sym.c
--- ext/dl/sym.c	21 Dec 2004 23:34:43 -0000	1.27
+++ ext/dl/sym.c	10 Jan 2005 13:47:03 -0000
@@ -267,10 +267,9 @@ rb_dlsym_inspect(VALUE self)
 
   str_size = RSTRING(proto)->len + 100;
-  str = dlmalloc(str_size);
-  snprintf(str, str_size - 1,
+  val = rb_tainted_str_new(0, str_size);
+  snprintf(RSTRING(val)->ptr, str_size,
 	   "#<DL::Symbol:0x%p func=0x%p '%s'>",
 	   sym, sym->func, RSTRING(proto)->ptr);
-  val = rb_tainted_str_new2(str);
-  dlfree(str);
+  RSTRING(val)->len = strlen(RSTRING(val)->ptr);
 
   return val;
@@ -467,5 +466,14 @@ rb_dlsym_call(int argc, VALUE argv[], VA
   dargs = ALLOC_N(ANY_TYPE, sym->len - 1);
   dtypes = ALLOC_N(int, sym->len - 1);
-#define FREE_ARGS {xfree(args); xfree(dargs); xfree(dtypes);}
+#define FREE_ARGS_FROM_I do {			\
+    do {					\
+      if( dtypes[i] == 's' && ANY2S(args[i]) ){	\
+	dlfree((void *)ANY2S(args[i]));		\
+	ANY2S(args[i]) = 0;			\
+      }						\
+    } while (++i <= sym->len - 2);		\
+    xfree(args); xfree(dargs); xfree(dtypes);	\
+  } while (0)
+#define FREE_ARGS do {i = 0; FREE_ARGS_FROM_I; } while (0)
 
   for( i = sym->len - 2; i >= 0; i-- ){
@@ -490,4 +498,5 @@ rb_dlsym_call(int argc, VALUE argv[], VA
 	    pval = rb_funcall(argv[i], rb_intern("to_ptr"), 0);
 	    if( !rb_obj_is_kind_of(pval, rb_cDLPtrData) ){
+	      FREE_ARGS_FROM_I;
 	      rb_raise(rb_eDLTypeError, "unexpected type of argument #%d", i);
 	    }
@@ -596,5 +605,5 @@ rb_dlsym_call(int argc, VALUE argv[], VA
       break;
     default:
-      FREE_ARGS;
+      FREE_ARGS_FROM_I;
       rb_raise(rb_eDLTypeError,
 	       "unknown type '%c' of the return value.",
@@ -923,9 +932,10 @@ rb_dlsym_call(int argc, VALUE argv[], VA
 	});
 	dlfree((void*)ANY2S(args[i]));
+	ANY2S(args[i]) = 0;
 	break;
       default:
 	{
 	  char c = dtypes[i];
-	  FREE_ARGS;
+	  FREE_ARGS_FROM_I;
 	  rb_raise(rb_eRuntimeError, "unknown argument type '%c'", i, c);
 	}
@@ -943,4 +953,5 @@ rb_dlsym_call(int argc, VALUE argv[], VA
 
 #undef FREE_ARGS
+#undef FREE_ARGS_FROM_I
   return rb_assoc_new(val,dvals);
 }


-- 
Nobu Nakada

In This Thread