[#15040] WeakRef and load(file, true) — Shugo Maeda <shugo@...>
前田です。
[#15043] puts array — "Akinori MUSHA" <knu@...>
puts に配列を与えたときの挙動が最新の 1.7 では変わっていて
こんにちは、なかむら(う)です。
At Wed, 7 Nov 2001 09:54:03 +0900,
[#15044] resolv.rb — Kazuhiro NISHIYAMA <zn@...>
Resolv::Hostsのデフォルトのファイル名ってWindows 9x環境だと
[#15047] can't set chomped String to environment — nobu.nakada@...
なかだです。
まつもと ゆきひろです
[#15067] rb_eval_string — OJ <oj@...7.com>
OJです。
なかだです。
OJです。
なかだです。
OJです。
わたなべです。
こんにちは、なかむら(う)です。
なかだです。
こんにちは、なかむら(う)です。
なかだです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
[#15100] Using static mark stack, GC is slow. — sheepman <sheepman@...>
こんばんは
[#15101] [bug?] pty causes segv by getting SIGINT — akira yamada / やまだあきら <akira@...>
まつもと ゆきひろです
[#15102] Gtk::Object#flags!= — akira yamada / やまだあきら <akira@...>
[#15116] rubylib_mangle whitespace — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
まつもと ゆきひろです
わたなべです。
[#15132] uri.rb — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#15174] strange behavior about PTY.spawn — akira yamada / やまだあきら <akira@...>
まつもと ゆきひろです
[#15175] ruby-mingw32 configuration — HIDAKA Takahiro <cv8t-hdk@...>
ひだかです。
わたなべです。
[#15239] gc.c (gc_mark_rest): declare work area as static — "K.Kosako" <kosako@...>
現在のGCのアルゴリズム(matz-sheepman)を少し変更しようと思って、
On Thu, 22 Nov 2001 16:21:17 +0900
sheepmanさんの<20011122202749.56b8eb49.sheepman@tcn.zaq.ne.jp>から
[#15251] Re: [ruby-ext:01999] Re: syslog module is becoming ready — "Akinori MUSHA" <knu@...>
というわけで 1.7 に syslog モジュールを入れました。
なかだです。
ただただしです。
At Mon, 26 Nov 2001 22:30:03 +0900,
In article <86r8ql90zt.wl@archon.local.idaemons.org>,
At Mon, 26 Nov 2001 23:07:30 +0900,
あおきです。
At Wed, 28 Nov 2001 07:58:55 +0900,
あおきです。
そうそう、 optparse も標準に入っていると便利だと思うのですが
まつもと ゆきひろです
In message <1007018271.960435.20342.nullmailer@ev.netlab.jp>
まつもと ゆきひろです
[#15270] ruby on NetBSD — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
In message <20011128181510.3D11.USA@osb.att.ne.jp>
こんにちは、なかむら(う)です。
In message <20011128182726.3D14.USA@osb.att.ne.jp>
なかだです。
こんにちは、なかむら(う)です。
In message <20011129183834.3790.USA@osb.att.ne.jp>
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
取り込み、ありがとうございます。
こんにちは、なかむら(う)です。
[#15292] Re: m17n ruby 特に TRON 文字コード — TOYOFUKU Chikanobu <toyofuku@...>
豊福です。
[#15298] time.rb — Tanaka Akira <akr@...17n.org>
というわけで、timex.rb 改め time.rb が rough に入ったのでご意見募集です。
In article <hvovgftkgy7.fsf@coulee.a02.aist.go.jp>,
まつもと ゆきひろです
まつもと ゆきひろです
In article <1009298477.998171.30253.nullmailer@ev.netlab.jp>,
[ruby-dev:15192] Re: strange behavior about PTY.spawn
まつもと ゆきひろです
In message "[ruby-dev:15185] Re: strange behavior about PTY.spawn"
on 01/11/16, akira yamada / やまだあきら <akira@ruby-lang.org> writes:
|In article 15176, <1005839997.280842.1714.nullmailer@ev.netlab.jp>
|Y> 1.7ではthread safeにしようとしてますが、
|Y> どうも不完全な気がします。
|
|というのはどういう点ですか?
main threadに例外を送ってる点とか。
|というのは当り前でSIGSTOPが来るとloop{}において例外が発生するのですよね(^_^;
|で, たとえばですがこういう感じにするというのはどうでしょうか?
手元ではこういう風にしてます。確信がないのでコミットできませ
んけど。
--- ext/pty/pty.c 2001/11/13 08:14:21 1.9
+++ ext/pty/pty.c 2001/11/16 05:16:02
@@ -109,4 +109,5 @@
struct pty_info {
- int fd;
- pid_t child_pid;
+ int fd;
+ pid_t child_pid;
+ VALUE thread;
};
@@ -114,3 +115,4 @@
static void
-pty_raise(cpid)
+pty_raise(thread, cpid)
+ VALUE thread;
int cpid;
@@ -119,6 +121,4 @@
- snprintf(buf, sizeof(buf),
- "eval %%Q{Thread.main.raise 'pty - stopped: %d'}, nil, \"%s\", %d",
- cpid, ruby_sourcefile, ruby_sourceline);
- rb_eval_string(buf);
+ snprintf(buf, sizeof(buf), "pty - stopped: %d", cpid);
+ rb_funcall(thread, rb_intern("raise"), 1, rb_str_new2(buf));
}
@@ -126,10 +126,10 @@
static VALUE
-pty_syswait(pid)
- int pid;
+pty_syswait(info)
+ struct pty_info *info;
{
int cpid, status;
-
- cpid = rb_waitpid(pid, &status, WUNTRACED);
- printf("PTY command (%d) finished (%d:%d)\n", pid, cpid, status);
+ cpid = rb_waitpid(info->child_pid, &status, WUNTRACED);
+ printf("cpid: %d (%d)\n", cpid, status);
+
if (cpid == 0 || cpid == -1)
@@ -139,3 +139,3 @@
if (IF_STOPPED(status)) { /* suspend */
- pty_raise(cpid);
+ pty_raise(info->thread, cpid);
}
@@ -144,3 +144,3 @@
if (WIFSTOPPED(status)) { /* suspend */
- pty_raise(cpid);
+ pty_raise(info->thread, cpid);
}
@@ -157,4 +157,5 @@
static void
-establishShell(shellname, info)
- char *shellname;
+establishShell(argc, argv, info)
+ int argc;
+ VALUE *argv;
struct pty_info *info;
@@ -165,4 +166,7 @@
RETSIGTYPE chld_changed();
-
- if (shellname[0] == '\0') {
+ VALUE v;
+
+ if (argc == 0) {
+ char *shellname;
+
if ((p = getenv("SHELL")) != NULL) {
@@ -177,2 +181,5 @@
}
+ v = rb_str_new2(shellname);
+ argc = 1;
+ argv = &v;
}
@@ -181,3 +188,3 @@
currentPid = getpid();
- if((i = vfork()) < 0) {
+ if((i = fork()) < 0) {
rb_sys_fail("fork failed");
@@ -186,4 +193,4 @@
if(i == 0) { /* child */
- int argc;
- char *argv[1024];
+ /* int argc;
+ char *argv[1024]; */
currentPid = getpid();
@@ -234,3 +241,2 @@
close(slave);
-
#if defined(HAVE_SETEUID) || defined(HAVE_SETREUID) || defined(HAVE_SETRESUID)
@@ -239,14 +245,3 @@
- argc = 0;
- for (i = 0; shellname[i];) {
- while (isspace(shellname[i])) i++;
- for (j = i; shellname[j] && !isspace(shellname[j]); j++);
- argv[argc] = (char*)xmalloc(j-i+1);
- strncpy(argv[argc],&shellname[i],j-i);
- argv[argc][j-i] = 0;
- i = j;
- argc++;
- }
- argv[argc] = NULL;
- execvp(argv[0],argv);
+ rb_f_exec(argc, argv);
sleep(1);
@@ -363,4 +358,6 @@
static VALUE
-pty_getpty(self, command)
- VALUE self, command;
+pty_getpty(argc, argv, self)
+ int argc;
+ VALUE *argv;
+ VALUE self;
{
@@ -374,8 +371,4 @@
MakeOpenFile(wport, wfptr);
-
- if (TYPE(command) == T_ARRAY)
- command = rb_ary_join(command,rb_str_new2(" "));
- Check_SafeStr(command);
- establishShell(RSTRING(command)->ptr,&info);
+ establishShell(argc, argv, &info);
@@ -383,3 +376,3 @@
rfptr->f = fdopen(info.fd, "r");
- rfptr->path = strdup(RSTRING(command)->ptr);
+ rfptr->path = 0; /*strdup(RSTRING(command)->ptr); */
@@ -387,3 +380,3 @@
wfptr->f = fdopen(dup(info.fd), "w");
- wfptr->path = strdup(RSTRING(command)->ptr);
+ wfptr->path = 0; /* strdup(RSTRING(command)->ptr); */
@@ -394,4 +387,5 @@
- printf("start watching PTY command (%d)\n", info.child_pid);
- th = rb_thread_create(pty_syswait, (void*)info.child_pid);
+ info.thread = rb_thread_current();
+ printf("thread %p\n", info.thread);
+ th = rb_thread_create(pty_syswait, (void*)&info);
if (rb_block_given_p()) {
@@ -431,4 +425,4 @@
cPTY = rb_define_module("PTY");
- rb_define_module_function(cPTY,"getpty",pty_getpty,1);
- rb_define_module_function(cPTY,"spawn",pty_getpty,1);
+ rb_define_module_function(cPTY,"getpty",pty_getpty,-1);
+ rb_define_module_function(cPTY,"spawn",pty_getpty,-1);
rb_define_module_function(cPTY,"protect_signal",pty_protect,0);