[newlib-cygwin] cygcheck.cc: Fix debugger problem

Corinna Vinschen corinna@sourceware.org
Sun Aug 30 19:42:00 GMT 2015


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

commit e3de6b0a4d7fc1f00b5961edc9e8e5a7a9e0a09e
Author: Corinna Vinschen <corinna@vinschen.de>
Date:   Sun Aug 30 21:35:23 2015 +0200

    cygcheck.cc: Fix debugger problem
    
            * cygcheck.cc (load_cygwin): Only unload cygwin DLL if not running
            under a debugger.  Explain why.
    
    Signed-off-by: Corinna Vinschen <corinna@vinschen.de>

Diff:
---
 winsup/utils/ChangeLog   |  5 +++++
 winsup/utils/cygcheck.cc | 12 ++++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog
index 080502e..d60691a 100644
--- a/winsup/utils/ChangeLog
+++ b/winsup/utils/ChangeLog
@@ -1,5 +1,10 @@
 2015-08-30  Corinna Vinschen  <corinna@vinschen.de>
 
+	* cygcheck.cc (load_cygwin): Only unload cygwin DLL if not running
+	under a debugger.  Explain why.
+
+2015-08-30  Corinna Vinschen  <corinna@vinschen.de>
+
 	* cygcheck.cc (dump_sysinfo): Correctly handle Windows 10/Server 2016.
 	Add missing product types.
 
diff --git a/winsup/utils/cygcheck.cc b/winsup/utils/cygcheck.cc
index 1cf4875..4538e1b 100644
--- a/winsup/utils/cygcheck.cc
+++ b/winsup/utils/cygcheck.cc
@@ -2340,7 +2340,8 @@ load_cygwin (int& argc, char **&argv)
       char **av = (char **) cygwin_internal (CW_ARGV);
       if (av && ((uintptr_t) av != (uintptr_t) -1))
 	{
-	  /* Copy cygwin's idea of the argument list into this Window application. */
+	  /* Copy cygwin's idea of the argument list into this Window
+	     application. */
 	  for (argc = 0; av[argc]; argc++)
 	    continue;
 	  argv = (char **) calloc (argc + 1, sizeof (char *));
@@ -2352,8 +2353,8 @@ load_cygwin (int& argc, char **&argv)
       char **envp = (char **) cygwin_internal (CW_ENVP);
       if (envp && ((uintptr_t) envp != (uintptr_t) -1))
 	{
-	  /* Store path and revert to this value, otherwise path gets overwritten
-	     by the POSIXy Cygwin variation, which breaks cygcheck.
+	  /* Store path and revert to this value, otherwise path gets
+	     overwritten by the POSIXy Cygwin variation, which breaks cygcheck.
 	     Another approach would be to use the Cygwin PATH and convert it to
 	     Win32 again. */
 	  char *path = NULL;
@@ -2371,7 +2372,10 @@ load_cygwin (int& argc, char **&argv)
 	    putenv (path);
 	}
     }
-  FreeLibrary (h);
+  /* GDB chokes when the DLL got unloaded and, for some reason, fails to set
+     any breakpoint after the fact. */
+  if (!IsDebuggerPresent ())
+    FreeLibrary (h);
 }
 
 int



More information about the Cygwin-cvs mailing list