Skip site navigation (1)Skip section navigation (2)
Date:      06 Aug 2002 19:11:16 -0400
From:      Joe Marcus Clarke <marcus@marcuscom.com>
To:        George <jirka@5z.com>
Cc:        gnome@FreeBSD.ORG
Subject:   Re: GDM 2.4.0.x & FreeBSD
Message-ID:  <1028675476.690.61.camel@gyros.marcuscom.com>
In-Reply-To: <20020731170330.GB20594@monique.linux.bogus>
References:  <20020715225248.GI19585@monique.linux.bogus> <20020729222247.E308-100000@shumai.marcuscom.com>  <20020731170330.GB20594@monique.linux.bogus>

next in thread | previous in thread | raw e-mail | index | archive | help
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:

"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.

Joe


> 
> George
> 
> -- 
> George <jirka@5z.com>
>    If the facts don't fit the theory, change the facts.
>                        -- Albert Einstein
> 
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-gnome" in the body of the message
> 
-- 
PGP Key : http://www.marcuscom.com/pgp.asc


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?1028675476.690.61.camel>