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

commit e3de6b0a4d7fc1f00b5961edc9e8e5a7a9e0a09e
Author: Corinna Vinschen <cori...@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 <cori...@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  <cori...@vinschen.de>
 
+       * cygcheck.cc (load_cygwin): Only unload cygwin DLL if not running
+       under a debugger.  Explain why.
+
+2015-08-30  Corinna Vinschen  <cori...@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

Reply via email to