[#7500] Re: how to introduce reference objects into ruby — "Geert Fannes" <Geert.Fannes@...>

The problem with the code you sent is that you have to go through ALL

16 messages 2006/03/10

[#7553] "not" operator used in expression that is a method parameter can generate syntax error — noreply@...

Bugs item #3843, was opened at 2006-03-15 22:09

27 messages 2006/03/16
[#7554] Re: [ ruby-Bugs-3843 ] "not" operator used in expression that is a method parameter can generate syntax error — nobu@... 2006/03/16

Hi,

[#7557] Re: [ ruby-Bugs-3843 ] "not" operator used in expression that is a method parameter can generate syntax error — 卜部昌平 <shyouhei@...> 2006/03/16

Nobu, you are not answering to the question.... You have to unveil why

[#7559] Re: [ ruby-Bugs-3843 ] "not" operator used in expression that is a method parameter can generate syntax error — Yukihiro Matsumoto <matz@...> 2006/03/16

Hi,

[#7560] Rant about keyword logical operators was : (Re: [ ruby-Bugs-3843 ] "not" operator used in expression that is a method parameter can generate syntax error) — "Zev Blut" <rubyzbibd@...> 2006/03/16

Hello,

[#7565] Re: [ ruby-Bugs-3843 ] "not" operator used in expression that is a method parameter can generate syntax error — mathew <meta@...> 2006/03/16

Yukihiro Matsumoto wrote:

[#7566] Re: [ ruby-Bugs-3843 ] "not" operator used in expression that is a method parameter can generate syntax error — "Brian Mitchell" <binary42@...> 2006/03/16

On 3/16/06, mathew <meta@pobox.com> wrote:

[#7567] Re: [ ruby-Bugs-3843 ] "not" operator used in expression that is a method parameter can generate syntax error — mathew <meta@...> 2006/03/16

Brian Mitchell wrote:

[#7568] Re: [ ruby-Bugs-3843 ] "not" operator used in expression that is a method parameter can generate syntax error — "Brian Mitchell" <binary42@...> 2006/03/16

On 3/16/06, mathew <meta@pobox.com> wrote:

[#7614] PATCH: A subclassable Pathname — "Evan Phoenix" <evanwebb@...>

A simply change (changing all references of "Pathname.new" to

19 messages 2006/03/27
[#7618] Re: PATCH: A subclassable Pathname — Tanaka Akira <akr@...17n.org> 2006/03/27

In article <92f5f81d0603262350k796fe48fp2224b9f2108ac507@mail.gmail.com>,

[#7619] Re: PATCH: A subclassable Pathname — "Evan Phoenix" <evan@...> 2006/03/27

Quite right on the .glob and .getwd. I guess the tests don't test hit

[#7620] Re: PATCH: A subclassable Pathname — Tanaka Akira <akr@...17n.org> 2006/03/27

In article <92f5f81d0603270903g2fb02244i6a395be708dfffa3@mail.gmail.com>,

[PATCH] async thread wakeup

From: Joshua Haberman <joshua@...>
Date: 2006-03-19 21:41:52 UTC
List: ruby-core #7585
I emailed ruby-core about this a while back, but got no response, so  
here is a patch to make my question more concrete.

This patch adds a hook into the thread scheduler that extensions can  
use to wake up a thread asynchronously.  It is a function you can  
safely call from any thread.  It will mark the thread runnable, so  
that the thread scheduler will consider running it the next time around.

It is similar in concept to the catch_timer() callback that sets  
rb_thread_pending: set a flag asynchronously that is then checked  
from the Ruby thread.

The function returns false (and does nothing) if the thread passed to  
it is not valid.  I refactored rb_thread_check slightly to support this.

Please let me know if this is suitable for inclusion in the main Ruby  
distribution.

Thanks,
Josh

Attachments (1)

async_thread_wakeup.patch (1.94 KB, text/x-diff)
? .eval.c.swp
? .intern.h.swp
? .ruby.h.swp
? async_thread_wakeup.patch
? ext/ripper/mkmf.log
Index: eval.c
===================================================================
RCS file: /src/ruby/eval.c,v
retrieving revision 1.890
diff -d -u -r1.890 eval.c
--- eval.c	23 Feb 2006 04:24:39 -0000	1.890
+++ eval.c	19 Mar 2006 21:25:53 -0000
@@ -10112,15 +10112,25 @@
 }
 
 static rb_thread_t
-rb_thread_check(VALUE data)
+rb_thread_get(VALUE data)
 {
     if (TYPE(data) != T_DATA || RDATA(data)->dmark != (RUBY_DATA_FUNC)thread_mark) {
-	rb_raise(rb_eTypeError, "wrong argument type %s (expected Thread)",
-		 rb_obj_classname(data));
+	return NULL;
     }
     return (rb_thread_t)RDATA(data)->data;
 }
 
+static rb_thread_t
+rb_thread_check(VALUE data)
+{
+    rb_thread_t th = rb_thread_get(data);
+
+    if (th) return th;
+
+    rb_raise(rb_eTypeError, "wrong argument type %s (expected Thread)",
+	     rb_obj_classname(data));
+}
+
 static VALUE rb_thread_raise(int, VALUE*, rb_thread_t);
 
 static VALUE th_raise_exception;
@@ -10769,6 +10779,18 @@
     rb_thread_restore_context(next, RESTORE_NORMAL);
 }
 
+/*
+ * Can be called asynchronously (in a different thread from the
+ * Ruby interpreter).
+ */
+int
+rb_thread_async_wakeup(VALUE thread)
+{
+    rb_thread_t th = rb_thread_get(thread);
+    if (th) th->status = THREAD_RUNNABLE;
+    return th != NULL;
+}
+
 void
 rb_thread_wait_fd(int fd)
 {
Index: intern.h
===================================================================
RCS file: /src/ruby/intern.h,v
retrieving revision 1.193
diff -d -u -r1.193 intern.h
--- intern.h	17 Feb 2006 08:40:51 -0000	1.193
+++ intern.h	19 Mar 2006 21:25:53 -0000
@@ -275,6 +275,7 @@
 void rb_thread_signal_exit(void);
 int rb_thread_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
 void rb_thread_wait_for(struct timeval);
+int rb_thread_async_wakeup(VALUE thread);
 VALUE rb_thread_current(void);
 VALUE rb_thread_main(void);
 VALUE rb_thread_local_aref(VALUE, ID);

In This Thread

Prev Next