[#30549] [ANN] Ruby 1.8.6 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.6 をリリースしました。

14 messages 2007/03/12

[#30553] help: lib/shell for ruby 1.9 — keiju@... (Keiju ISHITSUKA)

けいじゅ@いしつかです.

13 messages 2007/03/13
[#30585] Re: help: lib/shell for ruby 1.9 — Yukihiro Matsumoto <matz@...> 2007/03/15

まつもと ゆきひろです

[#30587] Re: help: lib/shell for ruby 1.9 — keiju@... (石塚圭樹) 2007/03/15

けいじゅ@いしつかです.

[#30588] Re: help: lib/shell for ruby 1.9 — Yukihiro Matsumoto <matz@...> 2007/03/15

まつもと ゆきひろです

[ruby-dev:30581] [ruby-core:10580] Thread後のexecでENOTSUPPエラー対応

From: "H.Holon" <holon@...>
Date: 2007-03-14 12:26:31 UTC
List: ruby-dev #30581
  相馬 - H.Holonです。

  [ruby-core:10580] にあった 
> Thread.new{}
> exec 'date'

  で ENOTSUPPエラーで止まる問題ですが、patchをかいてみました。
exec専用で Threadきりかえthreadを止めてしまってます。

  Intel Mac(10.4.9)で、 --disable/enable-pthreadではとりあえず動作を
確認しました。
   他の環境でも問題ないか testおねがいします。

----
SOUMA Yutaka (H.Holon) [ holon@radastery.jp | http://radastery.jp/ ]


Attachments (1)

threadexec.patch (1.25 KB, text/x-diff)
--- eval.c.org	2007-03-14 19:19:01.000000000 +0900
+++ eval.c	2007-03-14 21:02:57.000000000 +0900
@@ -11736,13 +11736,16 @@
     /* cause EINTR */
 }
 
-static pthread_t time_thread;
+static pthread_t time_thread = NULL;
 
 static void*
 thread_timer(dummy)
     void *dummy;
 {
     for (;;) {
+#ifdef _THREAD_SAFE
+    pthread_testcancel();
+#endif
 #ifdef HAVE_NANOSLEEP
 	struct timespec req, rem;
 
@@ -11773,6 +11776,19 @@
 rb_thread_stop_timer()
 {
 }
+void
+rb_thread_cancel_timer()
+{
+#ifdef _THREAD_SAFE
+	if( time_thread != NULL )
+	{
+    	pthread_cancel( time_thread );
+    	pthread_join( time_thread, NULL );
+    	time_thread = NULL;
+	}
+	thread_init = 0;
+#endif
+}
 #elif defined(HAVE_SETITIMER)
 static void
 catch_timer(sig)
@@ -11810,6 +11826,12 @@
     tval.it_value = tval.it_interval;
     setitimer(ITIMER_VIRTUAL, &tval, NULL);
 }
+
+void
+rb_thread_cancel_timer()
+{
+}
+
 #else  /* !(_THREAD_SAFE || HAVE_SETITIMER) */
 int rb_thread_tick = THREAD_TICK;
 #endif
--- process.c.org	2007-03-14 19:19:06.000000000 +0900
+++ process.c	2007-03-14 20:46:00.000000000 +0900
@@ -981,6 +981,7 @@
     }
 #endif /* MSDOS or __human68k__ or __EMX__ */
     before_exec();
+    rb_thread_cancel_timer();
     execv(prog, argv);
     after_exec();
     return -1;

In This Thread

Prev Next