aboutsummaryrefslogtreecommitdiffhomepage
path: root/bindings/ruby/tags.c
diff options
context:
space:
mode:
authorGravatar Ali Polatel <alip@exherbo.org>2010-05-26 18:54:25 +0300
committerGravatar Ali Polatel <alip@exherbo.org>2010-06-06 09:17:47 +0300
commitc7893408bbe6904ae7da97aa203587af4ec2fac7 (patch)
tree9139c51aff243eb0fdfaac35d75c557c0f7de29e /bindings/ruby/tags.c
parent35925e6e5be58ca33d8f40f1d6ec44b4e7799713 (diff)
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.
Diffstat (limited to 'bindings/ruby/tags.c')
-rw-r--r--bindings/ruby/tags.c30
1 files changed, 23 insertions, 7 deletions
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
@@ -21,6 +21,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
*
* Calls +block+ once for each element in +self+, passing that element as a
@@ -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;