[#27380] [Bug #2553] Fix pthreads slowness by eliminating unnecessary sigprocmask calls — Dan Peterson <redmine@...>

Bug #2553: Fix pthreads slowness by eliminating unnecessary sigprocmask calls

21 messages 2010/01/03

[#27437] [Feature #2561] 1.8.7 Patch reduces time cost of Rational operations by 50%. — Kurt Stephens <redmine@...>

Feature #2561: 1.8.7 Patch reduces time cost of Rational operations by 50%.

9 messages 2010/01/06

[#27447] [Bug #2564] [patch] re-initialize timer_thread_{lock,cond} after fork — Aliaksey Kandratsenka <redmine@...>

Bug #2564: [patch] re-initialize timer_thread_{lock,cond} after fork

18 messages 2010/01/06

[#27635] [Bug #2619] Proposed method: Process.fork_supported? — Hongli Lai <redmine@...>

Bug #2619: Proposed method: Process.fork_supported?

45 messages 2010/01/20
[#27643] [Feature #2619] Proposed method: Process.fork_supported? — Luis Lavena <redmine@...> 2010/01/21

Issue #2619 has been updated by Luis Lavena.

[#27678] Re: [Feature #2619] Proposed method: Process.fork_supported? — Yukihiro Matsumoto <matz@...> 2010/01/22

Hi,

[#27684] Re: [Feature #2619] Proposed method: Process.fork_supported? — Charles Oliver Nutter <headius@...> 2010/01/22

On Thu, Jan 21, 2010 at 11:27 PM, Yukihiro Matsumoto <matz@ruby-lang.org> w=

[#27708] Re: [Feature #2619] Proposed method: Process.fork_supported? — Yukihiro Matsumoto <matz@...> 2010/01/22

Hi,

[#27646] Re: [Bug #2619] Proposed method: Process.fork_supported? — Tanaka Akira <akr@...> 2010/01/21

2010/1/21 Hongli Lai <redmine@ruby-lang.org>:

[#27652] Re: [Bug #2619] Proposed method: Process.fork_supported? — Hongli Lai <hongli@...99.net> 2010/01/21

On 1/21/10 5:20 AM, Tanaka Akira wrote:

[#27653] Re: [Bug #2619] Proposed method: Process.fork_supported? — Tanaka Akira <akr@...> 2010/01/21

2010/1/21 Hongli Lai <hongli@plan99.net>:

[#27662] Re: [Bug #2619] Proposed method: Process.fork_supported? — Vladimir Sizikov <vsizikov@...> 2010/01/21

On Thu, Jan 21, 2010 at 10:53 AM, Tanaka Akira <akr@fsij.org> wrote:

[#27698] [Bug #2629] ConditionVariable#wait(mutex, timeout) should return whether the condition was signalled, not the waited time — Hongli Lai <redmine@...>

Bug #2629: ConditionVariable#wait(mutex, timeout) should return whether the condition was signalled, not the waited time

8 messages 2010/01/22

[#27722] [Feature #2635] Unbundle rdoc — Yui NARUSE <redmine@...>

Feature #2635: Unbundle rdoc

14 messages 2010/01/23

[#27757] [Bug #2638] ruby-1.9.1-p37[68] build on aix5.3 with gcc-4.2 failed to run for me because it ignores where libgcc is located. — Joel Soete <redmine@...>

Bug #2638: ruby-1.9.1-p37[68] build on aix5.3 with gcc-4.2 failed to run for me because it ignores where libgcc is located.

10 messages 2010/01/24

[#27778] [Bug #2641] Seg fault running miniruby during ruby build on Haiku — Alexander von Gluck <redmine@...>

Bug #2641: Seg fault running miniruby during ruby build on Haiku

10 messages 2010/01/25

[#27791] [Bug #2644] memory over-allocation with regexp — Greg Hazel <redmine@...>

Bug #2644: memory over-allocation with regexp

12 messages 2010/01/25

[#27794] [Bug #2647] Lack of testing for String#split — Hugh Sasse <redmine@...>

Bug #2647: Lack of testing for String#split

14 messages 2010/01/25

[#27912] [Bug #2669] mkmf find_executable doesn't find .bat files — Roger Pack <redmine@...>

Bug #2669: mkmf find_executable doesn't find .bat files

11 messages 2010/01/27

[#27930] [Bug:trunk] some behavior changes of lib/csv.rb between 1.8 and 1.9 — Yusuke ENDOH <mame@...>

Hi jeg2, or anyone who knows the implementation of FasterCSV,

15 messages 2010/01/28
[#27931] Re: [Bug:trunk] some behavior changes of lib/csv.rb between 1.8 and 1.9 — James Edward Gray II <james@...> 2010/01/28

On Jan 28, 2010, at 10:51 AM, Yusuke ENDOH wrote:

[ruby-core:27471] Re: [Feature #2012] Set event_flags on thread creation if hook exists

From: Yusuke ENDOH <mame@...>
Date: 2010-01-07 14:28:45 UTC
List: ruby-core #27471
Hi --

Sorry for very late response!


2009/8/30 Mark Moseley <redmine@ruby-lang.org>:
> In ruby-debug, when a user sets a breakpoint that ends up executed by a later-created thread, then nothing will happen.

Confirmed.

    $ ./ruby.org -e '
    > set_trace_func(proc {|*a| p a })
    > Thread.new { puts "foo" }.join
    > '
    ["c-return", "-e", 2, :set_trace_func, #<Binding:0x824d10c>, Kernel]
    ["line", "-e", 3, nil, #<Binding:0x824cfe0>, nil]
    ["c-call", "-e", 3, :new, #<Binding:0x824cf04>, Thread]
    ["c-call", "-e", 3, :initialize, #<Binding:0x824ce00>, Thread]
    ["c-return", "-e", 3, :initialize, #<Binding:0x824ccfc>, Thread]
    foo
    ["c-return", "-e", 3, :new, #<Binding:0x824cc0c>, Thread]
    ["c-call", "-e", 3, :join, #<Binding:0x824cb30>, Thread]
    ["c-return", "-e", 3, :join, #<Binding:0x824ca54>, Thread]

("c-call" event to the method `puts' is not found)

This issue affects the coverage feature too.  It fails to measure
coverage that is run in sub thread.  [ruby-dev:39950]


> I propose adding the following patch to the core:
>
> Index: thread.c
> ===================================================================
> --- thread.c    (revision 24710)
> +++ thread.c    (working copy)
> @@ -497,6 +497,9 @@
>     th->thgroup = GET_THREAD()->thgroup;
>
>     native_mutex_initialize(&th->interrupt_lock);
> +    if (GET_VM()->event_hooks != NULL)
> +        th->event_flags |= RUBY_EVENT_VM;
> +
>     /* kick thread */
>     st_insert(th->vm->living_threads, thval, (st_data_t) th->thread_id);
>     native_thread_create(th);


Basically I agree with your patch.  But it leaves event_flags true
even if all vm-level hooks are removed.  How about this patch:


diff --git a/thread.c b/thread.c
index 0ba41c7..c082471 100644
--- a/thread.c
+++ b/thread.c
@@ -531,6 +531,9 @@ thread_create_core(VALUE thval, VALUE args, VALUE
(*fn)(ANYARGS))
     th->thgroup = GET_THREAD()->thgroup;

     native_mutex_initialize(&th->interrupt_lock);
+    if (GET_VM()->event_hooks != NULL)
+	th->event_flags |= RUBY_EVENT_VM;
+
     /* kick thread */
     st_insert(th->vm->living_threads, thval, (st_data_t) th->thread_id);
     err = native_thread_create(th);
@@ -3750,7 +3753,12 @@ rb_threadptr_exec_event_hooks(rb_thread_t *th,
rb_event_flag_t flag, VALUE self,
 	exec_event_hooks(th->event_hooks, flag, self, id, klass);
     }
     if (wait_event & RUBY_EVENT_VM) {
-	exec_event_hooks(th->vm->event_hooks, flag, self, id, klass);
+	if (th->vm->event_hooks == NULL) {
+	    th->event_flags &= (~RUBY_EVENT_VM);
+	}
+	else {
+	    exec_event_hooks(th->vm->event_hooks, flag, self, id, klass);
+	}
     }
     th->errinfo = errinfo;
 }

-- 
Yusuke ENDOH <mame@tsg.ne.jp>

In This Thread