From c7893408bbe6904ae7da97aa203587af4ec2fac7 Mon Sep 17 00:00:00 2001 From: Ali Polatel Date: Wed, 26 May 2010 18:54:25 +0300 Subject: ruby: Kill garbage collection related cruft. Let the user destroy objects that she wants explicitly. It's not possible to specify the order objects are garbage collected. See id:86y6f8v838.fsf@harikalardiyari.ev on ruby-talk for more information. --- bindings/ruby/tags.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'bindings/ruby/tags.c') diff --git a/bindings/ruby/tags.c b/bindings/ruby/tags.c index d0a5054a..7ca03b6f 100644 --- a/bindings/ruby/tags.c +++ b/bindings/ruby/tags.c @@ -20,6 +20,23 @@ #include "defs.h" +/* + * call-seq: tags.destroy => nil + * + * Destroys the tags, freeing all resources allocated for it. + */ +VALUE +notmuch_rb_tags_destroy(VALUE self) +{ + notmuch_tags_t *tags; + + Data_Get_Struct(self, notmuch_tags_t, tags); + + notmuch_tags_destroy(tags); + + return Qnil; +} + /* * call-seq: TAGS.each {|item| block } => TAGS * @@ -30,16 +47,15 @@ VALUE notmuch_rb_tags_each(VALUE self) { const char *tag; - notmuch_rb_tags_t *tags; + notmuch_tags_t *tags; - Data_Get_Struct(self, notmuch_rb_tags_t, tags); - if (!tags->nm_tags) + Data_Get_Struct(self, notmuch_tags_t, tags); + if (!tags) return self; - for (; notmuch_tags_valid(tags->nm_tags); - notmuch_tags_move_to_next(tags->nm_tags)) { - tag = notmuch_tags_get(tags->nm_tags); - rb_yield(tag ? rb_str_new2(tag) : Qnil); + for (; notmuch_tags_valid(tags); notmuch_tags_move_to_next(tags)) { + tag = notmuch_tags_get(tags); + rb_yield(rb_str_new2(tag)); } return self; -- cgit v1.2.3