This is the mail archive of the cygwin-developers@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

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;
>     }



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]