Further work towards use of win32 file HANDLEs
[sbcl.git] / src / runtime / print.c
index e50da2e..7d0c97e 100644 (file)
@@ -27,6 +27,7 @@
 #include <stdarg.h>
 #include "thread.h"              /* genesis/primitive-objects.h needs this */
 #include <errno.h>
+#include <stdlib.h>
 
 /* FSHOW and odxprint provide debugging output for low-level information
  * (signal handling, exceptions, safepoints) which is hard to debug by
@@ -68,11 +69,19 @@ dyndebug_init()
     dyndebug_init1(seh,            "SEH");
     dyndebug_init1(misc,           "MISC");
     dyndebug_init1(pagefaults,     "PAGEFAULTS");
+    dyndebug_init1(io,             "IO");
+    dyndebug_init1(runtime_link,   "RUNTIME_LINK");
+
+    int n_output_flags = n;
+    dyndebug_init1(backtrace_when_lost, "BACKTRACE_WHEN_LOST");
+    dyndebug_init1(sleep_when_lost,     "SLEEP_WHEN_LOST");
 
     if (n != DYNDEBUG_NFLAGS)
         fprintf(stderr, "Bug in dyndebug_init\n");
 
+#if defined(LISP_FEATURE_GENCGC)
     gencgc_verbose = dyndebug_config.dyndebug_gencgc_verbose;
+#endif
 
     char *featurelist = getenv("SBCL_DYNDEBUG");
     if (featurelist) {
@@ -84,7 +93,7 @@ dyndebug_init()
             if (!token) break;
             unsigned i;
             if (!strcmp(token, "all"))
-                for (i = 0; i < DYNDEBUG_NFLAGS; i++)
+                for (i = 0; i < n_output_flags; i++)
                     *ptrs[i] = 1;
             else {
                 for (i = 0; i < DYNDEBUG_NFLAGS; i++)
@@ -104,8 +113,11 @@ dyndebug_init()
             fprintf(stderr, "Valid flags are:\n");
             fprintf(stderr, "  all  ;enables all of the following:\n");
             unsigned i;
-            for (i = 0; i < DYNDEBUG_NFLAGS; i++)
+            for (i = 0; i < DYNDEBUG_NFLAGS; i++) {
+                if (i == n_output_flags)
+                    fprintf(stderr, "Additional options:\n");
                 fprintf(stderr, "  %s\n", names[i]);
+            }
         }
     }
 
@@ -118,6 +130,8 @@ dyndebug_init()
  * be restored to its full win32 branch functionality, where output to a
  * file or to the debugger can be selected at runtime. */
 
+void vodxprint_fun(const char *, va_list);
+
 void
 odxprint_fun(const char *fmt, ...)
 {
@@ -132,9 +146,8 @@ vodxprint_fun(const char *fmt, va_list args)
 {
 #ifdef LISP_FEATURE_WIN32
     DWORD lastError = GetLastError();
-#else
-    int original_errno = errno;
 #endif
+    int original_errno = errno;
 
     QSHOW_BLOCK;
 
@@ -171,9 +184,8 @@ vodxprint_fun(const char *fmt, va_list args)
 
 #ifdef LISP_FEATURE_WIN32
     SetLastError(lastError);
-#else
-    errno = original_errno;
 #endif
+    errno = original_errno;
 }
 
 /* Translate the rather awkward syntax
@@ -203,6 +215,9 @@ fshow_fun(void __attribute__((__unused__)) *ignored,
 #ifdef LISP_FEATURE_GENCGC
 #include "gencgc-alloc-region.h" /* genesis/thread.h needs this */
 #endif
+#if defined(LISP_FEATURE_WIN32)
+# include "win32-thread-private-events.h" /* genesis/thread.h needs this */
+#endif
 #include "genesis/static-symbols.h"
 #include "genesis/primitive-objects.h"
 #include "genesis/static-symbols.h"