[#10661] bmingw package — WATANABE Hirofumi <eban@...>

わたなべです.

49 messages 2000/08/21
[#10664] Re: bmingw package — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/08/21

なかだです。

[#10665] Re: bmingw package — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/08/21

なかだです。

[#10667] Re: bmingw package — WATANABE Hirofumi <eban@...> 2000/08/21

わたなべです.

[#10668] Re: bmingw package — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/08/22

なかだです。

[#10670] Re: bmingw package — WATANABE Hirofumi <eban@...> 2000/08/22

わたなべです.

[#10671] Re: bmingw package — nobu.nakada@... 2000/08/22

なかだです。

[#10673] Re: bmingw package — WATANABE Hirofumi <eban@...> 2000/08/23

わたなべです.

[#10675] Re: bmingw package — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/08/23

なかだです。

[#10693] Re: bmingw package — WATANABE Hirofumi <eban@...> 2000/08/28

わたなべです.

[#10707] Re: bmingw package — nobu.nakada@... 2000/08/28

なかだです。

[#10713] Re: bmingw package — WATANABE Hirofumi <eban@...> 2000/08/29

わたなべです.

[#10717] Re: bmingw package — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/08/29

なかだです。

[#10723] Re: bmingw package — WATANABE Hirofumi <eban@...> 2000/08/30

わたなべです.

[#10797] Re: bmingw package — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/09/01

なかだです。

[#10821] Re: bmingw package — WATANABE Hirofumi <eban@...> 2000/09/04

わたなべです.

[#10824] Re: bmingw package — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/09/04

なかだです。

[#10825] Re: bmingw package — WATANABE Hirofumi <eban@...> 2000/09/04

わたなべです.

[#10827] Re: bmingw package — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/09/04

なかだです。

[#10837] Re: bmingw package — WATANABE Hirofumi <eban@...> 2000/09/05

わたなべです.

[#10677] Class Variable — Shin-ichiro Hara <sinara@...>

原です。

16 messages 2000/08/24
[#10681] Re: Class Variable — matz@... (Yukihiro Matsumoto) 2000/08/25

まつもと ゆきひろです

[#10688] ruby-1.6.0-20000824.i586-mswin32 bug — Kazuhiro NISHIYAMA <zn@...>

http://www.geocities.co.jp/SiliconValley-Bay/4076/

34 messages 2000/08/27
[#10692] Re: ruby-1.6.0-20000824.i586-mswin32 bug — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/08/28

なかだです。

[#10705] Re: ruby-1.6.0-20000824.i586-mswin32 bug — Kazuhiro NISHIYAMA <zn@...> 2000/08/28

"Nobuyoshi.Nakada" <nobu.nakada@nifty.ne.jp> wrote:

[#10711] Re: ruby-1.6.0-20000824.i586-mswin32 bug — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/08/29

なかだです。

[#10720] Re: ruby-1.6.0-20000824.i586-mswin32 bug — Katsuyuki Komatsu <komatsu@...> 2000/08/30

小松です.

[#10725] Re: ruby-1.6.0-20000824.i586-mswin32 bug — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/08/30

なかだです。

[#10805] ruby-1.6.0-20000901.i586-mswin32.lzh — Kazuhiro NISHIYAMA <zn@...> 2000/09/02

20000901のでもirbでCtrl+Cを押したら落ちました。

[#10807] Re: ruby-1.6.0-20000901.i586-mswin32.lzh — matz@... (Yukihiro Matsumoto) 2000/09/02

まつもと ゆきひろです

[#10811] Re: Ctrl+C on win32 console <- Re: ruby-1.6.0-20000901.i586-mswin32.lzh — " たけ (tk)" <ggb03124@...> 2000/09/03

たけ(tk)です。

[#10813] Re: Ctrl+C on win32 console <- Re: ruby-1.6.0-20000901.i586-mswin32.lzh — nobu.nakada@... 2000/09/03

なかだです。

[#10729] Fwd: patch of the ruby-1.4.6 for NT4.0&VC4.0 on DEC Alpha. — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

18 messages 2000/08/30
[#10730] Re: Fwd: patch of the ruby-1.4.6 for NT4.0&VC4.0 on DEC Alpha. — WATANABE Hirofumi <eban@...> 2000/08/30

わたなべです.

[#10762] ruby 1.6.0 preview — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

42 messages 2000/08/31

[ruby-dev:10768] Re: ruby-1.6.0-20000824.i586-mswin32 bug

From: "Nobuyoshi.Nakada" <nobu.nakada@...>
Date: 2000-08-31 15:57:28 UTC
List: ruby-dev #10768
なかだです。

At Thu, 31 Aug 2000 09:29:04 +0900
"Nobuyoshi.Nakada" <nobu.nakada@nifty.ne.jp> wrote:
>   こりゃダメっす。メインスレッドのレジスタが保存されてないので、不可思議
> な動きをしそうです。

  とりあえずは動きますが、GC の途中(たぶん)で割り込むと、ハンドラから抜け
たところで SEGV します。デバッガで追ってみると win32_call_handler() で
SetThreadContext() するところまでは OK なんですが。

  一応途中経過の報告ってことで、分かる方なんか教えてください (他力本願モー
ド ^^;)。


diff -pruPX ./.excludes current/signal.c devel/signal.c
--- current/signal.c	Mon Aug  7 14:01:57 2000
+++ devel/signal.c	Thu Aug 31 17:02:29 2000
@@ -341,6 +341,10 @@ static RETSIGTYPE
 sighandle(sig)
     int sig;
 {
+#ifdef NT
+    if (win32_main_context(sig, sighandle)) return;
+#endif
+
     if (sig >= NSIG) {
 	rb_bug("trap_handler: Bad signal %d", sig);
     }
diff -pruPX ./.excludes current/win32/win32.c devel/win32/win32.c
--- current/win32/win32.c	Tue Aug 15 16:11:13 2000
+++ devel/win32/win32.c	Thu Aug 31 16:28:41 2000
@@ -75,6 +75,9 @@ IsWinNT(void) {
     return (IdOS() == VER_PLATFORM_WIN32_NT);
 }
 
+/* main thread constants */
+HANDLE rb_MainThreadHandle;
+DWORD rb_MainThreadId;
 
 /* simulate flock by locking a range on the file */
 
@@ -164,6 +167,11 @@ NtInitialize(int *argc, char ***argv) {
 
     WORD version;
     int ret;
+    HANDLE proc = GetCurrentProcess();
+
+    DuplicateHandle(proc, GetCurrentThread(), proc,
+		    &rb_MainThreadHandle, 0, FALSE, DUPLICATE_SAME_ACCESS);
+    rb_MainThreadId = GetCurrentThreadId();
 
     //
     // subvert cmd.exe\'s feeble attempt at command line parsing
@@ -2498,4 +2506,61 @@ mytimes(struct tms *tmbuf)
 	tmbuf->tms_cstime = 0;
     }
     return 0;
+}
+
+int
+win32_thread_exclusive(void)
+{
+    if (GetCurrentThreadId() == rb_MainThreadId) return FALSE;
+
+    SuspendThread(rb_MainThreadHandle);
+    return TRUE;
+}
+
+void
+win32_thread_resume(void)
+{
+    ResumeThread(rb_MainThreadHandle);
+}
+
+static void
+win32_call_handler(int arg, void handler(int), CONTEXT con)
+{
+    handler(arg);
+    SetThreadContext(rb_MainThreadHandle, &con);
+    /* NOTREACHED */
+}
+
+void
+win32_thread_set_context(int arg, void handler(int))
+{
+    CONTEXT con;
+
+    ZeroMemory(&con, sizeof(CONTEXT));
+    con.ContextFlags = CONTEXT_FULL;
+    GetThreadContext(rb_MainThreadHandle, &con);
+    con.ContextFlags = CONTEXT_FULL;
+#ifdef _M_IX86
+    {
+	DWORD* esp = (DWORD *)(con.Esp - sizeof(CONTEXT));
+	*(CONTEXT *)esp = con;
+	*--esp = (DWORD)handler;
+	*--esp = arg;
+	*--esp = (DWORD)abort; /* never reached */
+	con.Esp = (DWORD)esp;
+    }
+    con.Eip = (DWORD)win32_call_handler;;
+#else
+#error
+#endif
+    SetThreadContext(rb_MainThreadHandle, &con);
+}
+
+int
+win32_main_context(int arg, void handler(int))
+{
+    if (!win32_thread_exclusive()) return FALSE;
+    win32_thread_set_context(arg, handler);
+    win32_thread_resume();
+    return TRUE;
 }
diff -pruPX ./.excludes current/win32/win32.h devel/win32/win32.h
--- current/win32/win32.h	Tue Aug 15 15:22:49 2000
+++ devel/win32/win32.h	Thu Aug 31 13:12:28 2000
@@ -426,4 +426,14 @@ struct tms {
 #endif
 #define times mytimes
 
+/* thread stuff */
+/* initialized by NtInitialize() */
+HANDLE rb_MainThreadHandle;
+DWORD rb_MainThreadId;
+
+int win32_thread_exclusive(void);
+void win32_thread_resume(void);
+int win32_main_context(int arg, void handler(int));
+
+
 #endif


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦


In This Thread