aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin/debug.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/debug.cc')
-rw-r--r--winsup/cygwin/debug.cc232
1 files changed, 0 insertions, 232 deletions
diff --git a/winsup/cygwin/debug.cc b/winsup/cygwin/debug.cc
deleted file mode 100644
index bea256c..0000000
--- a/winsup/cygwin/debug.cc
+++ /dev/null
@@ -1,232 +0,0 @@
-/* debug.cc
-
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009
- Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "cygerrno.h"
-#ifdef DEBUGGING
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#endif
-
-#undef CloseHandle
-
-#ifdef DEBUGGING
-/* Here lies extra debugging routines which help track down internal
- Cygwin problems when compiled with -DDEBUGGING . */
-#define NFREEH (sizeof (cygheap->debug.freeh) / sizeof (cygheap->debug.freeh[0]))
-
-class lock_debug
-{
- static muto locker;
- public:
- lock_debug ()
- {
- locker.acquire (INFINITE);
- }
- void unlock ()
- {
- locker.release ();
- }
- ~lock_debug () {unlock ();}
- friend void debug_init ();
-};
-
-muto NO_COPY lock_debug::locker;
-
-static bool __stdcall mark_closed (const char *, int, HANDLE, const char *, bool);
-
-void
-debug_init ()
-{
- lock_debug::locker.init ("debug_lock");
-}
-
-/* Find a registered handle in the linked list of handles. */
-static handle_list * __stdcall
-find_handle (HANDLE h)
-{
- handle_list *hl;
- for (hl = &cygheap->debug.starth; hl->next != NULL; hl = hl->next)
- if (hl->next->h == h)
- goto out;
- hl = NULL;
-
-out:
- return hl;
-}
-
-void
-verify_handle (const char *func, int ln, HANDLE h)
-{
- lock_debug here;
- handle_list *hl = find_handle (h);
- if (!hl)
- return;
- system_printf ("%s:%d - multiple attempts to add handle %p", func, ln, h);
-
- system_printf (" previously allocated by %s:%d(%s<%p>) winpid %d",
- hl->func, hl->ln, hl->name, hl->h, hl->pid);
-}
-
-void
-setclexec (HANDLE oh, HANDLE nh, bool not_inheriting)
-{
- lock_debug here;
- handle_list *hl = find_handle (oh);
- if (hl)
- {
- hl = hl->next;
- hl->inherited = !not_inheriting;
- hl->h = nh;
- }
-}
-
-/* Create a new handle record */
-static handle_list * __stdcall
-newh ()
-{
- handle_list *hl;
-
- for (hl = cygheap->debug.freeh; hl < cygheap->debug.freeh + NFREEH; hl++)
- if (hl->name == NULL)
- return hl;
-
- return NULL;
-}
-
-void __stdcall
-modify_handle (const char *func, int ln, HANDLE h, const char *name, bool inh)
-{
- lock_debug here;
- handle_list *hl = find_handle (h);
- if (!hl)
- {
- system_printf ("%s:%d handle %s<%p> not found", func, ln, name, h);
- return;
- }
- hl->next->inherited = inh;
- debug_printf ("%s:%d set handle %s<%p> inheritance flag to %d", func, ln,
- name, h, inh);
-}
-
-/* Add a handle to the linked list of known handles. */
-void __stdcall
-add_handle (const char *func, int ln, HANDLE h, const char *name, bool inh)
-{
- handle_list *hl;
-
- if (!cygheap)
- return;
-
- lock_debug here;
- if ((hl = find_handle (h)))
- {
- hl = hl->next;
- if (hl->name == name && hl->func == func && hl->ln == ln)
- return;
- system_printf ("%s:%d - multiple attempts to add handle %s<%p>", func,
- ln, name, h);
- system_printf (" previously allocated by %s:%d(%s<%p>) winpid %d",
- hl->func, hl->ln, hl->name, hl->h, hl->pid);
- return;
- }
-
- if ((hl = newh ()) == NULL)
- {
- here.unlock ();
- debug_printf ("couldn't allocate memory for %s(%d): %s(%p)",
- func, ln, name, h);
- return;
- }
- hl->h = h;
- hl->name = name;
- hl->func = func;
- hl->ln = ln;
- hl->inherited = inh;
- hl->pid = GetCurrentProcessId ();
- hl->next = cygheap->debug.starth.next;
- cygheap->debug.starth.next = hl;
- SetHandleInformation (h, HANDLE_FLAG_PROTECT_FROM_CLOSE, HANDLE_FLAG_PROTECT_FROM_CLOSE);
- debug_printf ("protecting handle '%s'(%p), inherited flag %d", hl->name, hl->h, hl->inherited);
-}
-
-static void __stdcall
-delete_handle (handle_list *hl)
-{
- handle_list *hnuke = hl->next;
- debug_printf ("nuking handle '%s' (%p)", hnuke->name, hnuke->h);
- hl->next = hnuke->next;
- memset (hnuke, 0, sizeof (*hnuke));
-}
-
-void
-debug_fixup_after_fork_exec ()
-{
- /* No lock needed at this point */
- handle_list *hl;
- for (hl = &cygheap->debug.starth; hl->next != NULL; /* nothing */)
- if (hl->next->inherited)
- hl = hl->next;
- else
- delete_handle (hl); // removes hl->next
-}
-
-static bool __stdcall
-mark_closed (const char *func, int ln, HANDLE h, const char *name, bool force)
-{
- handle_list *hl;
-
- if (!cygheap)
- return true;
-
- if ((hl = find_handle (h)) && !force)
- {
- hl = hl->next;
- system_printf ("attempt to close protected handle %s:%d(%s<%p>) winpid %d",
- hl->func, hl->ln, hl->name, hl->h, hl->pid);
- system_printf (" by %s:%d(%s<%p>)", func, ln, name, h);
- return false;
- }
-
- handle_list *hln;
- if (hl && (hln = hl->next) && strcmp (name, hln->name) != 0)
- {
- system_printf ("closing protected handle %s:%d(%s<%p>)",
- hln->func, hln->ln, hln->name, hln->h);
- system_printf (" by %s:%d(%s<%p>)", func, ln, name, h);
- }
-
- if (hl)
- delete_handle (hl);
-
- return true;
-}
-
-/* Close a known handle. Complain if !force and closing a known handle or
- if the name of the handle being closed does not match the registered name. */
-bool __stdcall
-close_handle (const char *func, int ln, HANDLE h, const char *name, bool force)
-{
- bool ret;
-
- lock_debug here;
- if (!mark_closed (func, ln, h, name, force))
- return false;
-
- SetHandleInformation (h, HANDLE_FLAG_PROTECT_FROM_CLOSE, 0);
- ret = CloseHandle (h);
-
- if (!ret)
- small_printf ("CloseHandle(%s<%p>) failed %s:%d, %E\n", name, h, func, ln);
- return ret;
-}
-#endif /*DEBUGGING*/