From f225f3e9dcd1a08b9d0a83d9365602948d4fe77d Mon Sep 17 00:00:00 2001 From: Tilman Sauerbeck Date: Fri, 11 Aug 2006 15:40:05 +0200 Subject: [PATCH] Made the IO buffer global. There's no need to give each Ogg::Vorbis::Tagger instance its own buffer. This should help memory consumption when there's more than one Ogg::Vorbis::Tagger object around. The downside is that the buffer object will be kept alive forever. --- ext/ext.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/ext/ext.c b/ext/ext.c index 4794d28..99eefbe 100644 --- a/ext/ext.c +++ b/ext/ext.c @@ -29,12 +29,11 @@ typedef struct { vcedit_state *state; VALUE comments; - VALUE io_buf; } RbVorbisTagger; static VALUE c_close (VALUE self); -static VALUE cComments, eVTError; +static VALUE cComments, eVTError, io_buf; static ID id_read, id_write, id_seek, id_length; static size_t @@ -44,9 +43,9 @@ on_read (void *ptr, size_t size, size_t nmemb, RbVorbisTagger *o) size_t total = size * nmemb; VALUE tmp; - rb_str_resize (o->io_buf, size * nmemb); + rb_str_resize (io_buf, size * nmemb); - tmp = rb_funcall (o->io, id_read, 2, LONG2NUM (total), o->io_buf); + tmp = rb_funcall (o->io, id_read, 2, LONG2NUM (total), io_buf); if (NIL_P (tmp)) return 0; @@ -61,10 +60,10 @@ on_write (const void *ptr, size_t size, size_t nmemb, RbVorbisTagger *o) { size_t total = size * nmemb; - rb_str_resize (o->io_buf, total); - memcpy (RSTRING (o->io_buf)->ptr, ptr, total); + rb_str_resize (io_buf, total); + memcpy (RSTRING (io_buf)->ptr, ptr, total); - return NUM2LONG (rb_io_write (o->io, o->io_buf)); + return NUM2LONG (rb_io_write (o->io, io_buf)); } static void @@ -72,7 +71,7 @@ c_mark (RbVorbisTagger *o) { rb_gc_mark (o->io); rb_gc_mark (o->comments); - rb_gc_mark (o->io_buf); + rb_gc_mark (io_buf); } static void @@ -146,7 +145,6 @@ c_init (VALUE self, VALUE io) rb_raise (rb_eArgError, "invalid argument"); o->io = io; - o->io_buf = rb_str_buf_new (BUFSIZ); o->state = vcedit_state_new (); if (!o->state) @@ -278,4 +276,7 @@ Init_vorbistagger_ext (void) id_length = rb_intern ("length"); cComments = Init_Comments (mVorbis); + + io_buf = rb_str_buf_new (BUFSIZ); + rb_global_variable (&io_buf); } -- 2.30.2