diff options
author | Ali Polatel <alip@exherbo.org> | 2010-05-26 18:54:25 +0300 |
---|---|---|
committer | Ali Polatel <alip@exherbo.org> | 2010-06-06 09:17:47 +0300 |
commit | c7893408bbe6904ae7da97aa203587af4ec2fac7 (patch) | |
tree | 9139c51aff243eb0fdfaac35d75c557c0f7de29e /bindings/ruby/threads.c | |
parent | 35925e6e5be58ca33d8f40f1d6ec44b4e7799713 (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/threads.c')
-rw-r--r-- | bindings/ruby/threads.c | 38 |
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; |