X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=bindings%2Fruby%2Fthreads.c;h=09906975f1e84091ead20878a06b96b60e55d0b1;hp=cee6afbe018f1abd26d07eafe6e2b8440b8277c8;hb=c7893408bbe6904ae7da97aa203587af4ec2fac7;hpb=35925e6e5be58ca33d8f40f1d6ec44b4e7799713 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;