Date: Wed, 07 Aug 2002 12:20:30 +0300 From: Maxim Sobolev <sobomax@FreeBSD.org> To: Joe Marcus Clarke <marcus@marcuscom.com> Cc: George <jirka@5z.com>, gnome@FreeBSD.ORG Subject: Re: GDM 2.4.0.x & FreeBSD Message-ID: <3D50E65E.BC416D0@FreeBSD.org> References: <20020715225248.GI19585@monique.linux.bogus> <20020729222247.E308-100000@shumai.marcuscom.com> <20020731170330.GB20594@monique.linux.bogus> <1028675476.690.61.camel@gyros.marcuscom.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Joe Marcus Clarke wrote: > > On Wed, 2002-07-31 at 13:03, George wrote: > > On Mon, Jul 29, 2002 at 10:25:09PM -0400, Joe Marcus Clarke wrote: > > > George, I just pulled down your latest diffs from CVS, but the problem > > > with gdm from /etc/ttys. I'm still getting the EBADF from slave.c at > > > lines 1495 and 1500. > > > > I suppose these are the dup2 lines. Hmmm, this is very weird, I can't see > > why it wouldn't be possible to dup into stdin and stdout. Perhaps the > > solution may be to not use stdin and stdout in this case (it's not neccessary > > really, it's just the original design of the beast). > > > > can you try to change this to: > > > > if (pipe1[1] != STDOUT_FILENO) { > > close (STDOUT_FILENO); > > dup2 (pipe1[1], STDOUT_FILENO); > > close (pipe1[1]); > > } > > > > if (pipe2[0] != STDIN_FILENO) { > > close (STDIN_FILENO); > > dup2 (pipe2[0], STDIN_FILENO); > > close (pipe2[0]); > > } > > > > (Note those if's are just an anality and something I'll get rid of later, > > they will always trigger) > > > > Perhaps we can't dup into those original fd's, though dup2 should do the > > close for us. > > I tried your new file descriptor patch to slave.c, and this made things > worse. Now, gdm doesn't even start. It continues to start, die, and > restart, until it does so enough times, then the display is disabled. > > To fix this, I took out the two lines that closed the child end of the > pipes (lines 1507 and 1508). On FreeBSD, if one end of a pipe is > closed, the pipe is considered widowed, and the process gets hit with a > SIGPIPE. From FreeBSD's pipe(2) manpage: This is incorrect interpretation. Actually, for historical reasons pipe(2) call returns two bi-directional pipes, so that it is absolutely valid to close unused one both in the clien and server (check src/lib/libc/gen/popen.c for example). -Maxim > > "A pipe that has had an end closed is considered widowed. Writing on > such a pipe causes the writing process to receive a SIGPIPE signal. > Widowing a pipe is the only way to deliver end-of-file to a reader: > after the reader consumes any buffered data, reading a widowed pipe > returns a zero count. > > The bidirectional nature of this implementation of pipes is not portable > to older systems, so it is recommended to use the convention for using > the endpoints in the traditional manner when using a pipe in one direc- > tion." > > However, even after removing the close calls, the problem with the > unusable Username field remains. The file descriptor numbers for the > pipe ends remain constant at 9 for out and 10 for in. This is true even > if gdm is started manually without the --nodaemon option. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-gnome" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3D50E65E.BC416D0>