This is the mail archive of the cygwin@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]
Other format: [Raw text]

Re: (1.3.22) mount: strange 15 second delay


Rolf Campbell wrote:
Ok, I recompiled the mount.exe program with -ggdb. The delay was in on line 382. The last call to getmntent (the one that returns NULL) is the one that takes > 10 seconds.

Was hoping that this would spark a thought in someone. I'll start trying to get a debug cygwin load building to test further.

374:static void
375:show_mounts (void)
376:{
377: FILE *m = setmntent ("/-not-used-", "r");
378: struct mntent *p;
379: const char *format = "%s on %s type %s (%s)\n";
380:
381: // printf (format, "Device", "Directory", "Type", "Flags");
382: while ((p = getmntent (m)) != NULL)
383: printf (format, p->mnt_fsname, p->mnt_dir, p->mnt_type, p->mnt_opts);
384: endmntent (m);
385:}

Now I got the dll building on my machine. And I know what the real problem is. If a network mounted drive is innaccesible for whatever reason, GetFileAttributes("i:\\") will take a LONG time. So, I just avoided running that command on "REMOTE" drives.


So, here's a patch:

Index: path.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/path.cc,v
retrieving revision 1.248
diff -u -p -r1.248 path.cc
--- path.cc	9 Mar 2003 20:31:07 -0000	1.248
+++ path.cc	18 Apr 2003 22:29:48 -0000
@@ -2423,8 +2423,13 @@ cygdrive_getmntent ()
 	  break;

       __small_sprintf (native_path, "%c:\\", drive);
-      if (GetDriveType (native_path) == DRIVE_REMOVABLE ||
-	  GetFileAttributes (native_path) == INVALID_FILE_ATTRIBUTES)
+      unsigned driveType = GetDriveType(native_path);
+
+      if (driveType != DRIVE_REMOTE &&
+          //Remote drives are always valid (takes too long to really
+          // validate.
+          (driveType == DRIVE_REMOVABLE ||
+           GetFileAttributes(native_path) == INVALID_FILE_ATTRIBUTES))
 	{
 	  available_drives &= ~mask;
 	  continue;


And changelog entry: 2003-04-18 Rolf Campbell <Endlisnis at mailc dot net>

* path.cc (driveType): Don't call GetFileAttributes on REMOTE drives.



--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


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