Date: Fri, 11 Jun 1999 17:09:49 -0700 (PDT) From: Allan Saddi <asaddi@philosophysw.com> To: freebsd-emulation@freebsd.org Subject: Bug in linux fcntl syscall? Message-ID: <Pine.BSF.4.10.9906111638550.23239-100000@shell2.ba.best.com>
next in thread | raw e-mail | index | archive | help
I decided to play around with the Linux version of TclPro 1.2 yesterday, since I found out my company had a site license for it. Anyway, what I found was that the installation program would hang on uzpln86 (the included unzip program). By searching the archives of this group, I found that Chris Timmons ran into a similar problem early this year (Re: TclPro for Linux eval). No solution appeared to have been found. I got around this problem by unzipping/installing the package myself and kludging the installation program. What I got was a relatively usable installation. However, the problem appeared again when I tried to use the GUI debugger (prodebug). prodebug would execute protclsh80 and just hang. No CPU usage, no I/O, nada. Today, after hours of truss'ing and strace'ing (on a RedHat 6 system), I discovered the problem. In linux_file.c, the function linux_fcntl: #ifdef DEBUG printf("Linux-emul(%d): fcntl(%d, %08x, *)\n", p->p_pid, args->fd, args->cmd); #endif fcntl_args.fd = args->fd; fcntl_args.arg = 0; switch (args->cmd) { ... case LINUX_F_SETFD: fcntl_args.cmd = F_SETFD; return fcntl(p, &fcntl_args); Notice that fcntl_args.arg is always 0. This keeps the F_SETFD call from ever setting the close-on-exec flag, which is precisely the problem. I patched the LINUX_F_SETFD case to set fcntl_args.arg to args->arg, and TclPro's prodebug now works fine. (The fcntl calls were made on fd's from a pipe. I surmise the child dup's these fd's and eventually closes them to signal to the parent that it is done. Since the original descriptors never closed [because close-on-exec wasn't set], this event never happened.) I would've filed a PR, but looking at the code, I see other cases that set/assign fcntl_args.arg explicitly. So I'm wondering if this was a design decision rather than a bug? (One of those feature vs. bugs things, I guess. ;) Oh yeah, my system: FreeBSD 3.2-STABLE #42: Wed May 19 17:48:38 PDT 1999 A bit stale, but I did check the CVS repository and there weren't any major updates to the linux emulator that would seemingly affect this. Any comments? -- Allan Saddi "The Earth is the cradle of mankind, asaddi@philosophysw.com but we cannot live in the cradle http://www.philosophysw.com/asaddi/ forever." - K.E. Tsiolkovsky To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-emulation" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.10.9906111638550.23239-100000>