cvs commit: src/lib/libthr/thread thr_join.c

Mike Makonnen mtm at identd.net
Wed May 28 00:46:10 PDT 2003


On Tue, 27 May 2003 18:55:52 -0400
Alexander Kabaev <ak03 at gte.com> wrote:

> 
> konsole has similar problems when run with libkse. The ktrace + source
> code inspection convinced me that it simply abort()'a itself, because
> ttyname() function returns NULL in makePty() function. 

Yes, seems like it. More comments below.

> 
> I do not think either threading library has anything to do with the
> failure.

It doesn't look like it's a threading issue, but since libc_r doesn't bring out
this behaviour in Konsole, they must be doing (or not doing) something (directly
or indirectly) that triggers it.

I have finally taken the plunge and installed KDE, and I can reproduce the bug.
However, it is unclear to me exactly what the problem is. To complicate things
even further it doesn't even look look Konsole uses threads, and instead plays
games with fork(2). I think we need someone who is familiar with the code to
help out because I am having a hard time following it. Just to add a couple of
data points:

It crashes because tcgetattr(3) called from libc/ttyname_unthreaded() returns
ENOTTY to TEPty::makePty().

When it does crash it is also usually preceded by:
	konsole: cannot chown /dev/ttypc.
	Reason: Operation not permitted
which is as a result of this code snippet from TEPty.cpp:openPty()

    if (openpty(&master_fd, &slave_fd, NULL, NULL, NULL) == 0) {
      m_MasterFd = master_fd;
      m_SlaveFd = slave_fd;
#ifdef HAVE_PTSNAME
      strncpy(ptynam, ptsname(master_fd), 50);
	...
	[snip]
	...
      if (fchown(slave_fd, (uid_t) -1, gid) < 0)
      {
         m_bNeedGrantPty = true;
         fprintf(stderr,"konsole: cannot chown %s.\n",ttynam);
         perror("Reason");
      }


The fact that it works sometimes and abort()s at others suggests that there may
be a race somewhere, but where...

Cheers.
-- 
Mike Makonnen  | GPG-KEY: http://www.identd.net/~mtm/mtm.asc
mtm at identd.net | D228 1A6F C64E 120A A1C9  A3AA DAE1 E2AF DBCC 68B9
mtm at FreeBSD.Org| FreeBSD - The Power To Serve


More information about the cvs-src mailing list