public inbox for cygwin-cvs@sourceware.org
help / color / mirror / Atom feed
* [newlib-cygwin] Cygwin: use win pid+threadid for forkables dirname
@ 2019-04-12 18:01 Corinna Vinschen
  0 siblings, 0 replies; only message in thread
From: Corinna Vinschen @ 2019-04-12 18:01 UTC (permalink / raw)
  To: cygwin-cvs

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=204efa6bbac2b355c65818100414c3ce2cda2a9e

commit 204efa6bbac2b355c65818100414c3ce2cda2a9e
Author: Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
Date:   Fri Apr 12 15:32:56 2019 +0200

    Cygwin: use win pid+threadid for forkables dirname
    
    Rather than newest last write time of all dlls loaded, use the forking
    process' windows pid and windows thread id as directory name to create
    the forkable hardlinks into.  While this may create hardlinks more
    often, it does avoid conflicts between dlls not having the newest last
    write time.

Diff:
---
 winsup/cygwin/forkable.cc | 26 +++++++-------------------
 1 file changed, 7 insertions(+), 19 deletions(-)

diff --git a/winsup/cygwin/forkable.cc b/winsup/cygwin/forkable.cc
index d1b0f57..4580610 100644
--- a/winsup/cygwin/forkable.cc
+++ b/winsup/cygwin/forkable.cc
@@ -340,30 +340,18 @@ exename (PWCHAR buf, ssize_t bufsize)
   return format_IndexNumber (buf, bufsize, &d->fii.IndexNumber);
 }
 
-/* Into buf if not NULL, write the newest dll's LastWriteTime.
+/* Into buf if not NULL, write the current Windows Thread Identifier.
    Return the number of characters (that would be) written. */
 static int
-lwtimename (PWCHAR buf, ssize_t bufsize)
+winthrname (PWCHAR buf, ssize_t bufsize)
 {
   if (!buf)
-    return sizeof (LARGE_INTEGER) * 2;
-  if (bufsize >= 0 && bufsize <= (int)sizeof (LARGE_INTEGER) * 2)
+    return sizeof (DWORD) * 4;
+  if (bufsize >= 0 && bufsize <= (int)sizeof (DWORD) * 4)
     return 0;
 
-  LARGE_INTEGER newest = { 0 };
-  /* Need by-handle-file-information for _all_ loaded dlls,
-     as most recent ctime forms the hardlinks directory. */
-  dll *d = &dlls.start;
-  while ((d = d->next))
-    {
-      /* LastWriteTime more properly tells the last file-content modification
-	 time, because a newly created hardlink may have a different
-	 CreationTime compared to the original file. */
-      if (d->fbi.LastWriteTime.QuadPart > newest.QuadPart)
-	newest = d->fbi.LastWriteTime;
-    }
-
-  return __small_swprintf (buf, L"%016X", newest);
+  return __small_swprintf (buf, L"%08X%08X",
+			   GetCurrentProcessId(), GetCurrentThreadId());
 }
 
 struct namepart {
@@ -382,7 +370,7 @@ forkable_nameparts[] = {
   { L"<sid>",         sidname,          true,  true,  },
   { L"<exe>",         exename,          false, false, },
   { MUTEXSEP,            NULL,          false, false, },
-  { L"<ctime>",    lwtimename,          true,  true,  },
+  { L"<winthr>",   winthrname,          true,  true,  },
 
   { NULL, NULL },
 };


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-04-12 18:01 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-12 18:01 [newlib-cygwin] Cygwin: use win pid+threadid for forkables dirname Corinna Vinschen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).