[#10793] 今度こそ (patch of the ruby-1.4.6 for NT4.0&VC4.0 on DEC Alpha.) — kou@...1609.sip.eee.yamaguchi-u.ac.jp (Koichi Okada)
岡田です。
10 messages
2000/09/01
[#10815] Re: 今度こそ (patch of the ruby-1.4.6 for NT4.0&VC4.0on DEC Alpha.)
— nobu.nakada@...
2000/09/03
なかだです。
[#10816] Re: 今度こそ (patchof the ruby-1.4.6 for NT4.0&VC4.0on DEC Alpha.)
— kou@...1609.sip.eee.yamaguchi-u.ac.jp (Koichi Okada)
2000/09/04
岡田です。
[#10820] Re: 今度こそ (patchof the ruby-1.4.6 for NT4.0&VC4.0on DEC Alpha.)
— "Nobuyoshi.Nakada" <nobu.nakada@...>
2000/09/04
なかだ@ゴミです。
[#10866] Class Variable (sono 2) — Shin-ichiro HARA <sinara@...>
原です。
5 messages
2000/09/08
[#10882] setenv,unsetenv — Takaaki Tateishi <ttate@...>
立石です.
6 messages
2000/09/11
[#10894] Forward: [ruby-ext:01274] Re: 多重代入での to_a (Re: Ruby/Python doesn't work with Ruby 1.6) — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
3 messages
2000/09/11
[#10897] Re: [CVS 266] "matz: 1.6.0 final (hopufully)" — WATANABE Hirofumi <Hirofumi.Watanabe@...>
わたなべです.
6 messages
2000/09/12
[#10903] Class Variable と継承 — Kazuhiro NISHIYAMA <zn@...>
メソッドや定数は子クラスの方が常に優先されるみたいですが
8 messages
2000/09/12
[#10914] Re: Class Variable と継承
— Yasushi Shoji <yashi@...>
2000/09/13
At Wed, 13 Sep 2000 02:57:29 +0900,
[#10920] SIGINT on windows — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
17 messages
2000/09/14
[#11077] Re: SIGINT on windows
— matz@... (Yukihiro Matsumoto)
2000/09/27
まつもと ゆきひろです
[#11080] Re: SIGINT on windows
— Katsuyuki Komatsu <komatsu@...>
2000/09/27
小松です.
[#11081] Re: SIGINT on windows
— matz@... (Yukihiro Matsumoto)
2000/09/27
まつもと ゆきひろです
[#11089] Re: SIGINT on windows
— nobu.nakada@...
2000/09/27
なかだです。
[#11094] Re: SIGINT on windows
— nobu.nakada@...
2000/09/28
なかだです。
[#10921] proper tail recursion — Shugo Maeda <shugo@...>
前田です。
5 messages
2000/09/14
[#10943] Passing []/String as argument — Jun Adachi <adachi@...>
安達@沖データと申します。
2 messages
2000/09/18
[#10944] dummy DLL on Windows — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
19 messages
2000/09/18
[#10955] Re: dummy DLL on Windows
— WATANABE Hirofumi <eban@...>
2000/09/19
わたなべです.
[#10963] Re: dummy DLL on Windows
— "Nobuyoshi.Nakada" <nobu.nakada@...>
2000/09/19
なかだです。
[#10964] Re: dummy DLL on Windows
— WATANABE Hirofumi <eban@...>
2000/09/19
わたなべです.
[#10967] Re: dummy DLL on Windows
— WATANABE Hirofumi <eban@...>
2000/09/19
わたなべです.
[#10970] Re: dummy DLL on Windows
— "Nobuyoshi.Nakada" <nobu.nakada@...>
2000/09/19
なかだです。
[#10971] Re: dummy DLL on Windows
— WATANABE Hirofumi <eban@...>
2000/09/19
わたなべです.
[#10975] Re: dummy DLL on Windows
— "Nobuyoshi.Nakada" <nobu.nakada@...>
2000/09/19
なかだです。
[#10976] Re: dummy DLL on Windows
— WATANABE Hirofumi <eban@...>
2000/09/19
わたなべです.
[#10977] Re: dummy DLL on Windows
— matz@... (Yukihiro Matsumoto)
2000/09/19
まつもと ゆきひろです
[#10979] Re: dummy DLL on Windows
— "Nobuyoshi.Nakada" <nobu.nakada@...>
2000/09/20
なかだです。
[#10946] require "marshal" failure — Katsuyuki Komatsu <komatsu@...>
小松です.
9 messages
2000/09/18
[#10949] Re: require "marshal" failure
— matz@... (Yukihiro Matsumoto)
2000/09/18
まつもと ゆきひろです
[#10953] Re: require "marshal" failure
— WATANABE Hirofumi <eban@...>
2000/09/19
わたなべです.
[#10948] File::Constants — Yasushi Shoji <yashi@...>
Wed Oct 22 12:52:30 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
5 messages
2000/09/18
[#10978] [PATCH] require in require — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
15 messages
2000/09/20
[#10981] Re: [PATCH] require in require
— matz@... (Yukihiro Matsumoto)
2000/09/20
まつもと ゆきひろです
[#10982] ruby1.6.0 on win32c
— Akira Muraki <a-muraki@...>
2000/09/20
村木@日立ITです。
[#10993] Re: ruby1.6.0 on win32c
— WATANABE Hirofumi <eban@...>
2000/09/21
わたなべです.
[#10985] httphead.rb proxy version problem — Katsuyuki Komatsu <komatsu@...>
小松です.
16 messages
2000/09/20
[#10989] Re: httphead.rb proxy version problem
— Minero Aoki <aamine@...>
2000/09/20
あおきです。
[#10992] Re: httphead.rb proxy version problem
— Katsuyuki Komatsu <komatsu@...>
2000/09/21
小松です。
[#10996] Re: httphead.rb proxy version problem
— matz@... (Yukihiro Matsumoto)
2000/09/21
まつもと ゆきひろです
[#10997] Re: httphead.rb proxy version problem
— matz@... (Yukihiro Matsumoto)
2000/09/21
まつもと ゆきひろです
[#11006] lstat — WATANABE Hirofumi <eban@...>
わたなべです.
14 messages
2000/09/21
[#11007] Re: lstat
— matz@... (Yukihiro Matsumoto)
2000/09/21
まつもと ゆきひろです
[#11008] Re: lstat
— matz@... (Yukihiro Matsumoto)
2000/09/21
まつもと ゆきひろです
[#11028] regex.c warning of alpha — Katsuyuki Komatsu <komatsu@...>
小松です。
7 messages
2000/09/22
[#11037] RUBYLIB_PRIFIX at emx/gcc — kenn@...
長沢です。
7 messages
2000/09/22
[#11052] ruby-1.6.1-20000921-i386-cygwin and Thread — Shin-ichiro HARA <sinara@...>
原です。
12 messages
2000/09/24
[#11056] Re: ruby-1.6.1-20000921-i386-cygwin and Thread
— WATANABE Hirofumi <eban@...>
2000/09/24
わたなべです.
[#11057] Re: ruby-1.6.1-20000921-i386-cygwin and Thread
— Shin-ichiro Hara <sinara@...>
2000/09/25
原です。
[#11058] Re: ruby-1.6.1-20000921-i386-cygwin and Thread
— ARIMA Yasuhiro <fit0298@...>
2000/09/25
有馬です。
[#11066] [PATCH] gcc extension in regex.c — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
6 messages
2000/09/26
[#11068] Re: [PATCH] gcc extension in regex.c
— "Nobuyoshi.Nakada" <nobu.nakada@...>
2000/09/26
なかだです。
[#11074] 定数のネスト — Kazuhiro NISHIYAMA <zn@...>
http://www2.osk.3web.ne.jp/~kgt/Ruby.html#000925_2
8 messages
2000/09/26
[ruby-dev:10794] Re: ruby-1.6.0-20000824.i586-mswin32 bug
From:
"Nobuyoshi.Nakada" <nobu.nakada@...>
Date:
2000-09-01 12:08:33 UTC
List:
ruby-dev #10794
なかだです。
At Fri, 1 Sep 2000 01:10:25 +0900
arton <arton@geocities.co.jp> wrote:
> やっと、家に帰れた...というくらい、今、忙しくて、全然検証できないんです
> が、
いやはや。お疲れさまです(^^;。
> > + {
> > + DWORD* esp = (DWORD *)(con.Esp - sizeof(CONTEXT));
> > + *(CONTEXT *)esp = con;
> > + *--esp = (DWORD)handler;
> > + *--esp = arg;
> > + *--esp = (DWORD)abort; /* never reached */
> > + con.Esp = (DWORD)esp;
> ここ、うまいなぁ、と思ったけど、考えてみたら、他のスレッドのスタックはい
> じれないのでした。
え、そうなんですか。デバッガで追ってみると win32_call_handler() には正
しく渡っているものの、最後に SetThreadContext() した後でレジスタが変わっ
てるように見えたんですが。
> (レジスターはCONTEXTに入ってますが、うまい復帰方法は考え付かないので、
> とりあえずsignalの引数相当の分だけスタティック変数に突っ込んで、スタティ
> ック変数からシグナル関数に入る関数(ややこしい)にメインスレッドを突っ込
> んそこから、どこかに飛ばせないでしょうか?)
> ・その中でスレッド作らせて、自分をsuspendさせ、CONTEXTを再度設定させて、
> resumeさせるとかかな?
これって、自分のスレッドに(当然動いてる状態で) SetThreadContext() はで
きないってことでしょうか。一応それも考えて割り込みのスレッドに通知して
後始末させるっていうのも試したんですが、やっぱり con.Eip に戻ったところ
でレジスタが変わってしまっているような。メインのスタックを使わずにスタテ
ィック変数を使うようにしても同じです。
ほとんどお手上げ。
diff -pruPX ./.excludes current/win32/win32.c devel/win32/win32.c
--- current/win32/win32.c Fri Sep 1 12:31:05 2000
+++ devel/win32/win32.c Fri Sep 1 21:00:53 2000
@@ -75,6 +75,21 @@ IsWinNT(void) {
return (IdOS() == VER_PLATFORM_WIN32_NT);
}
+/* main thread constants */
+HANDLE rb_CurrentProcessHandle;
+HANDLE rb_MainThreadHandle;
+DWORD rb_MainThreadId;
+
+HANDLE GetCurrentThreadHandle(void)
+{
+ HANDLE h;
+ HANDLE proc = rb_CurrentProcessHandle;
+
+ if (!DuplicateHandle(proc, GetCurrentThread(), proc, &h,
+ 0, FALSE, DUPLICATE_SAME_ACCESS))
+ return NULL;
+ return h;
+}
/* simulate flock by locking a range on the file */
@@ -165,6 +180,10 @@ NtInitialize(int *argc, char ***argv) {
WORD version;
int ret;
+ rb_CurrentProcessHandle = GetCurrentProcess();
+ rb_MainThreadHandle = GetCurrentThreadHandle();
+ rb_MainThreadId = GetCurrentThreadId();
+
//
// subvert cmd.exe\'s feeble attempt at command line parsing
//
@@ -2504,4 +2523,101 @@ mytimes(struct tms *tmbuf)
tmbuf->tms_cstime = 0;
}
return 0;
+}
+
+static void
+win32_suspend_self(void)
+{
+ SuspendThread(GetCurrentThread());
+}
+
+#define STATIC_ARGUMENTS
+#ifdef STATIC_ARGUMENTS
+#define INT(x) win32_int_##x
+static int INT(arg);
+static void (*INT(handler))(int);
+static HANDLE INT(ev);
+static volatile int INT(status);
+#define win32_int_statusp &win32_int_status
+#else
+#define INT(x) x
+#endif
+
+static void
+win32_call_handler(
+#ifdef STATIC_ARGUMENTS
+ void
+#else
+ int arg, void (*handler)(int), HANDLE ev, volatile int* statusp
+#endif
+)
+{
+ (void)rb_protect((VALUE (*)())INT(handler), (VALUE)INT(arg), INT(statusp));
+ SetEvent(INT(ev));
+ if (*INT(statusp)) rb_jump_tag(*INT(statusp));
+ win32_suspend_self();
+}
+
+int
+win32_main_context(int arg, void (*handler)(int))
+{
+ CONTEXT con;
+#ifndef STATIC_ARGUMENTS
+ HANDLE ev;
+ volatile int status = 0;
+#endif
+#ifdef _M_IX86
+ DWORD old_esp, old_eip;
+#else
+#error
+#endif
+
+ if (GetCurrentThreadId() == rb_MainThreadId) return FALSE;
+
+#ifdef STATIC_ARGUMENTS
+ INT(arg) = arg;
+ INT(handler) = handler;
+#endif
+ SuspendThread(rb_MainThreadHandle);
+ ZeroMemory(&con, sizeof(CONTEXT));
+ con.ContextFlags = CONTEXT_FULL | CONTEXT_FLOATING_POINT;
+ GetThreadContext(rb_MainThreadHandle, &con);
+ INT(ev) = CreateEvent(NULL, FALSE, FALSE, NULL);
+#ifdef _M_IX86
+ old_eip = con.Eip;
+ old_esp = con.Esp;
+#ifndef STATIC_ARGUMENTS
+ {
+ DWORD *esp = (DWORD *)old_esp;
+ *--esp = (DWORD)&status;
+ *--esp = (DWORD)ev;
+ *--esp = (DWORD)handler;
+ *--esp = arg;
+ *--esp = (DWORD)win32_suspend_self; /* main thread stops here */
+ con.Esp = (DWORD)esp;
+ }
+#endif
+ con.Eip = (DWORD)win32_call_handler;
+#else
+#error
+#endif
+
+ con.ContextFlags = CONTEXT_CONTROL;
+ SetThreadContext(rb_MainThreadHandle, &con);
+ ResumeThread(rb_MainThreadHandle);
+
+ WaitForSingleObject(INT(ev), INFINITE);
+ CloseHandle(INT(ev));
+
+ if (!INT(status)) {
+ SuspendThread(rb_MainThreadHandle);
+ con.ContextFlags = CONTEXT_FULL | CONTEXT_FLOATING_POINT;
+#ifdef _M_IX86
+ con.Eip = old_eip;
+ con.Esp = old_esp;
+#endif
+ SetThreadContext(rb_MainThreadHandle, &con);
+ ResumeThread(rb_MainThreadHandle);
+ }
+ 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 Fri Sep 1 21:06:00 2000
@@ -426,4 +426,14 @@ struct tms {
#endif
#define times mytimes
+/* thread stuff */
+/* initialized by NtInitialize() */
+HANDLE rb_CurrentProcessHandle;
+HANDLE rb_MainThreadHandle;
+DWORD rb_MainThreadId;
+
+HANDLE GetCurrentThreadHandle(void);
+int win32_main_context(int arg, void (*handler)(int));
+
+
#endif
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦