aboutsummaryrefslogtreecommitdiffhomepage
path: root/bindings/ruby/threads.c
diff options
context:
space:
mode:
Diffstat (limited to 'bindings/ruby/threads.c')
-rw-r--r--bindings/ruby/threads.c38
1 files changed, 25 insertions, 13 deletions
diff --git a/bindings/ruby/threads.c b/bindings/ruby/threads.c
index cee6afbe..09906975 100644
--- a/bindings/ruby/threads.c
+++ b/bindings/ruby/threads.c
@@ -20,6 +20,24 @@
#include "defs.h"
+/*
+ * call-seq: THREADS.destroy => nil
+ *
+ * Destroys the threads, freeing all resources allocated for it.
+ */
+VALUE
+notmuch_rb_threads_destroy(VALUE self)
+{
+ notmuch_threads_t *threads;
+
+ Data_Get_Struct(self, notmuch_threads_t, threads);
+
+ notmuch_threads_destroy(threads);
+
+ return Qnil;
+}
+
+
/* call-seq: THREADS.each {|item| block } => THREADS
*
* Calls +block+ once for each thread in +self+, passing that element as a
@@ -28,22 +46,16 @@
VALUE
notmuch_rb_threads_each(VALUE self)
{
- notmuch_rb_thread_t *thread;
- notmuch_rb_threads_t *threads;
- VALUE threadv;
+ notmuch_thread_t *thread;
+ notmuch_threads_t *threads;
- Data_Get_Struct(self, notmuch_rb_threads_t, threads);
- if (!threads->nm_threads)
+ Data_Get_Struct(self, notmuch_threads_t, threads);
+ if (!threads)
return self;
- for (; notmuch_threads_valid(threads->nm_threads);
- notmuch_threads_move_to_next(threads->nm_threads))
- {
- threadv = Data_Make_Struct(notmuch_rb_cThread, notmuch_rb_thread_t,
- notmuch_rb_thread_mark, notmuch_rb_thread_free, thread);
- thread->nm_thread = notmuch_threads_get(threads->nm_threads);
- thread->threads = self;
- rb_yield(threadv);
+ for (; notmuch_threads_valid(threads); notmuch_threads_move_to_next(threads)) {
+ thread = notmuch_threads_get(threads);
+ rb_yield(Data_Wrap_Struct(notmuch_rb_cThread, NULL, NULL, thread));
}
return self;