This is the mail archive of the
cygwin-developers@cygwin.com
mailing list for the Cygwin project.
Re: cygwin slowdown in current cvs version
On Sun, 2001-09-09 at 06:44, Christopher Faylor wrote:
> On Sat, Sep 08, 2001 at 10:23:26PM +0200, Corinna Vinschen wrote
>
> If we were going to do that, though, we should set up one global "change
> notification" handle for /etc/group and /etc/passwd, right?
After a quick MSDN scan, I couldn't see any per file scanning mechanism.
which means notification on /etc is about it (barring fancy tricks like
/etc/changingdata/passwd and /etc/passwd->changindata/passwd :])
> Index: passwd.cc
> ===================================================================
> if (!pwd_w32[0]) /* First call. */
> {
> ! char *p;
> ! path_conv pwd ("/etc/passwd", PC_SYM_FOLLOW | PC_FULL);
> ! if (!pwd.error)
> ! strcpy (pwd_w32, pwd);
> ! if ((p = strrchr (pwd, '\\')) != NULL)
> {
> ! *p = '\0';
> ! hchanged = FindFirstChangeNotification (pwd, FALSE,
> ! FILE_NOTIFY_CHANGE_LAST_WRITE);
> ! if (hchanged == INVALID_HANDLE_VALUE)
> {
> ! system_printf ("hchanged '%s', %p, %E", (char *) pwd, hchanged);
> ! hchanged = NULL;
> ! }
> }
> ! }
> ! else if (hchanged && WaitForSingleObject (hchanged, 0) == WAIT_OBJECT_0)
> ! {
> ! (void) FindNextChangeNotification (hchanged);
> ! small_printf ("/etc changed\n");
> ! state = uninitialized;
This is wrong - it doesn't mean /etc/pwd was altered, just /etc. We
should now fstat /etc/passwd and then return. Otherwise every change to
anything in /etc - including /etc itself will result in a re-read.
On the other hand perhaps just rereading is faster than fstat :]?
(Remembering the common case will be read once).
> }
> return state;
> }