Mail Archives: cygwin/2009/08/14/03:56:02
On Aug 13 20:24, Andy Koppe wrote:
> 2009/8/13 Corinna Vinschen:
> > I just tried that on W7 and W7 64. I can't reproduce any specific
> > slowness starting with he second invocation of rxvt, incuding writing
> > the utmp entry. The startup time is always the same, roughly a second,
> > regardless of the number of already open rxvt windows.
>
> I tried it again briefly last night. It only happened when logged in
> as an administrator, not as a limited user. That's with UAC enabled.
> Didn't try disabling. Reproduced both with 'rxvt' and 'mintty -u', and
> timed the delay to about 15 seconds.
That's really a long time.
> Trying to investigate further now, I can no longer reproduce it.
> That's without having changed anything, knowingly anyway. Gah.
>
> This is on:
> CYGWIN_NT-6.1-WOW64 Tobermory 1.7.0(0.212/5/3) 2009-08-11 11:07 i686 Cygwin
Scotch enthusiast?
> And here's the mintty code that (sometimes) triggers the problem:
>
> ut.ut_type = USER_PROCESS;
> ut.ut_pid = pid;
> ut.ut_time = time(0);
> char *dev = ptsname(fd);
> if (dev) {
> if (strncmp(dev, "/dev/", 5) == 0)
> dev += 5;
> strncpy(ut.ut_line, dev ?: "?", sizeof ut.ut_line);
> if (strncmp(dev, "pty", 3) == 0 || strncmp(dev, "tty", 3) == 0)
> dev += 3;
> strncpy(ut.ut_id, dev ?: "?", sizeof ut.ut_id);
> }
> strncpy(ut.ut_user, (pw ? pw->pw_name : 0) ?: "?", sizeof ut.ut_user);
> login(&ut);
>
> Must be the login() that does it. My uneducated guess is that it's
> some sort of file access timeout regarding /var/run/utmp.
I don't see anything in login which could explain this, unless it's
a wait for a lock. There's a function locked_append which utilizes
a POSIX file lock to coordinate appending to the utmp file. I tried
a couple of tests like starting a lot of rxvt's in a tight bash loop,
but I don't see any such hang.
What you could do is this. Build a Cygwin DLL without optimization so
that it's easily debuggable and install the cygwin1.dbg file alongside
of the DLL. Since the delay is so long, 15 secs, you could have enough
time to attach to the process via gdb and examine the thread call
stacks. Maybe that gives us a clue.
I'm wondering anyway if it's really necessary to use fcntl locks for
this function. Using a simple mutex looks more than sufficient.
> A couple of other things I noticed. When starting 'rxvt' or 'mintty
> -u' as a limited user, no utmp entry is created, which seems to be due
> to /var/run/utmp being owned by an administrator ("Fish"):
>
> $ ls -l /var/run/utmp
> -rw-r--r-- 1 Fish root 3080 Aug 13 19:56 /var/run/utmp
>
> After deleting that file and touching it from the limited user account
> ("Andy"), both were able to create utmp entries:
Yep. /var/run/utmp is created by setup.exe with default 0644 permissions.
Of course, one of the postinstall scripts could set the permissions to
0666, but I'm not sure admins will like the idea. In theory, the utmp
file was supposed to be used by sshd, telnet, rlogin and the likes, not
by local processes...
> $ w
> 20:17:08 up 43 min, 3 users, load average: 0.00, 0.00, 0.00
> USER TTY LOGIN@ IDLE JCPU PCPU WHAT
> Fish tty5 20:11 986days 0.00s 0.09s -bash
> Fish tty6 20:11 986days 0.00s 0.21s -bash
> Andy tty4 20:11 986days 0.00s 0.07s -bash
>
> And of course I haven't been logged in for three years, so I guess the
> IDLE field isn't implemented?
Actually I don't now where `w' gets the idle information from. The utmp
file has standard utmp layout, per /usr/include/sys/utmp.h.
I just see that I still didn't care for IPv6 addresses in utmpx. Looks
like the utmp file finally has to change its layout. Baeh. Yet another
point for the ever-growing TODO list.
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
Red Hat
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
- Raw text -