[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00951] Re: ツリーで移動中にSEGV
- Subject: [FDclone-users:00951] Re: ツリーで移動中にSEGV
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Sun, 11 Mar 2012 18:31:00 +0900
しらいです。
In Message-Id <20120311082834.B02094806A6@yuka.unixusers.net>
Takashi SHIRAI <shirai@unixusers.net>writes:
> しらいです。
> > 1.tcsetpgrp() が freeze する。
> > 2.子 process に制御端末を渡せない。
>
> この二つですが、実は tcsetpgrp() は正常に機能していました。
> ioctl() で TIOCSPGRP request を使っていたのがまずかったよう
> で、tcsetpgrp() に置換えたら動きました。
こちらの patch も一応挙げておきます。Cygwin 以外でも必要に
応じて選択出来るように識別子を用意したので、POSIX は全てこの
実装にした方が良いかも知れません。
ただ、確か HP-UX が bug 付の tcsetpgrp() を持ってた筈なの
で、当面は ioctl() の方を既定値にしておきます。
---- Cut Here ----
diff -ur ../old/FD-3.00j/machine.h ./machine.h
--- ../old/FD-3.00j/machine.h Sat Sep 25 00:00:00 2010
+++ ./machine.h Sun Mar 11 16:32:45 2012
@@ -517,10 +517,11 @@
#define USESETENV
#define USEMKTIME
#define DEFFDSETSIZE
+#define USETCGETPGRP
#define SIGFNCINT
#define USESOCKLEN
#define USEINETATON
-#define WAITKEYPAD 36
+#define WAITKEYPAD 720
#endif
#if defined (linux)
@@ -1023,6 +1024,7 @@
/* #define USETIMES ;use times() for getting process time */
/* #define GETPGRPVOID ;getpgrp() needs void argument */
/* #define USESETPGID ;use setpgid() instead of setpgrp() */
+/* #define USETCGETPGRP ;use tcgetpgrp()/tcsetpgrp() instead of ioctl() */
/* #define USESETVBUF ;use setvbuf() instead of setbuf() or setlinebuf() */
/* #define SIGARGINT ;the 2nd argument function of signal() returns int */
/* #define SIGFNCINT ;the 2nd argument function of signal() needs int */
diff -ur ../old/FD-3.00j/system.h ./system.h
--- ../old/FD-3.00j/system.h Sat Sep 25 00:00:00 2010
+++ ./system.h Sun Mar 11 16:40:54 2012
@@ -94,13 +94,13 @@
#define ENVCOMSPEC "COMSPEC"
#define ENVREPLY "REPLY"
-#ifdef TIOCGPGRP
+#if defined (TIOCGPGRP) && !defined (USETCGETPGRP)
#define gettcpgrp(f,g) ((ioctl(f, TIOCGPGRP, g) < 0) \
? (*(g) = (p_id_t)-1) : *(g))
#else
#define gettcpgrp(f,g) (*(g) = tcgetpgrp(f))
#endif
-#ifdef TIOCSPGRP
+#if defined (TIOCSPGRP) && !defined (USETCGETPGRP)
#define settcpgrp(f,g) ioctl(f, TIOCSPGRP, &(g))
#else
#define settcpgrp tcsetpgrp
---- Cut Here ----
しらい たかし