Tweaked Stream#serialize to be more GC-friendly.
authorTilman Sauerbeck <tilman@code-monkey.de>
Mon, 27 Jun 2005 19:22:58 +0000 (19:22 +0000)
committerTilman Sauerbeck <tilman@code-monkey.de>
Mon, 27 Jun 2005 19:22:58 +0000 (19:22 +0000)
ChangeLog
ext/ext.c

index 70f076fde174e8e82e2b9fa888dc8c4c4594e521..153a5ec9cd53c612ac1b907ddb3412129e31ccd3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,10 @@
 --
-$Id: ChangeLog 63 2005-06-09 17:47:46Z tilman $
+$Id: ChangeLog 64 2005-06-27 19:22:58Z tilman $
 ++
 
+2005-06-27 Tilman Sauerbeck (tilman at code-monkey de)
+        * ext/ext.c: Tweaked Stream#serialize to be more GC-friendly
+
 2005-06-09 Tilman Sauerbeck (tilman at code-monkey de)
         * ext/ext.c: Object#to_eet: Don't put the final chunk in a stream
           again, it's not needed
index e36442f9501e5025132db4e71bf8a282017773f5..a9f14db9fbc4fd279443949a7cc52d045cdd0c8c 100644 (file)
--- a/ext/ext.c
+++ b/ext/ext.c
@@ -1,5 +1,5 @@
 /*
- * $Id: ext.c 63 2005-06-09 17:47:46Z tilman $
+ * $Id: ext.c 64 2005-06-27 19:22:58Z tilman $
  *
  * Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de)
  *
@@ -444,11 +444,11 @@ stream_serialize (VALUE self)
        struct RArray *stream;
        long i;
 
-       ret = rb_str_new2 ("");
-
        stream = RARRAY (self);
        if (!stream->len)
-               return ret;
+               return rb_str_new2 ("");
+
+       ret = rb_ary_new ();
 
        for (i = 0; i < stream->len; i++) {
                VALUE str;
@@ -458,10 +458,10 @@ stream_serialize (VALUE self)
 
                str = rb_funcall (stream->ptr[i], id_serialize, 0, NULL);
 
-               rb_str_append (ret, str);
+               rb_ary_push (ret, str);
        }
 
-       return ret;
+       return rb_ary_join (ret, Qnil);
 }
 
 static VALUE