Date: Wed, 28 May 2003 03:46:06 -0400 From: Mike Makonnen <mtm@identd.net> To: Alexander Kabaev <ak03@gte.com> Cc: cvs-all@FreeBSD.org Subject: Re: cvs commit: src/lib/libthr/thread thr_join.c Message-ID: <20030528074607.PASI4805.out003.verizon.net@kokeb.ambesa.net> In-Reply-To: <20030527185552.258336eb.ak03@gte.com> References: <20030527214357.CE12C37B48F@hub.freebsd.org> <20030527150907.A6683@root.org> <20030527223325.PAUX28930.out004.verizon.net@kokeb.ambesa.net> <20030527185552.258336eb.ak03@gte.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 27 May 2003 18:55:52 -0400 Alexander Kabaev <ak03@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@identd.net | D228 1A6F C64E 120A A1C9 A3AA DAE1 E2AF DBCC 68B9 mtm@FreeBSD.Org| FreeBSD - The Power To Serve
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030528074607.PASI4805.out003.verizon.net>