cvs commit: src/lib/libthr/thread thr_join.c
Don Lewis
truckman at FreeBSD.org
Wed May 28 01:12:46 PDT 2003
On 28 May, Mike Makonnen wrote:
> 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...
According to the openpty() and fchown() man pages, the fchown() call
will fail with that error if
konsole isn't running with an effective UID of super-user at that
point.
AND
The slave device either isn't owned by the user or gid isn't
a member of the user's group.
More information about the cvs-all
mailing list