[newlib-cygwin] Cygwin: loadavg: improve debugging of load_init

Corinna Vinschen corinna@sourceware.org
Tue Mar 12 16:10:00 GMT 2019


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

commit de7f13aa9acec022ad1e4b3f929d4dc982ddf60b
Author: Corinna Vinschen <corinna@vinschen.de>
Date:   Tue Mar 12 17:09:42 2019 +0100

    Cygwin: loadavg: improve debugging of load_init
    
    When logging in via ssh with an unprivileged account,
    PdhAddEnglishCounter returns with status 0x800007D0,
    PDH_CSTATUS_NO_MACHINE.  We didn't find any workaround
    but the changes to improve debugging output may help
    in future.  Using UNICODE instead of ANSI functions is
    a result of trying to fix this problem.
    
    Also drop the prototype workaround for PdhAddEnglishCounterA.
    It's not required anymore since Mingw-w64's pdh.h catched up.
    
    Signed-off-by: Corinna Vinschen <corinna@vinschen.de>

Diff:
---
 winsup/cygwin/autoload.cc |  4 ++--
 winsup/cygwin/loadavg.cc  | 40 +++++++++++++++++++++++++---------------
 2 files changed, 27 insertions(+), 17 deletions(-)

diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc
index 056fac7..c4d9161 100644
--- a/winsup/cygwin/autoload.cc
+++ b/winsup/cygwin/autoload.cc
@@ -755,8 +755,8 @@ LoadDLLfunc (WSASocketW, 24, ws2_32)
 // LoadDLLfunc (WSAStartup, 8, ws2_32)
 LoadDLLfunc (WSAWaitForMultipleEvents, 20, ws2_32)
 
-LoadDLLfunc (PdhAddEnglishCounterA, 16, pdh)
+LoadDLLfunc (PdhAddEnglishCounterW, 16, pdh)
 LoadDLLfunc (PdhCollectQueryData, 4, pdh)
 LoadDLLfunc (PdhGetFormattedCounterValue, 16, pdh)
-LoadDLLfunc (PdhOpenQueryA, 12, pdh)
+LoadDLLfunc (PdhOpenQueryW, 12, pdh)
 }
diff --git a/winsup/cygwin/loadavg.cc b/winsup/cygwin/loadavg.cc
index bef80e1..127591a 100644
--- a/winsup/cygwin/loadavg.cc
+++ b/winsup/cygwin/loadavg.cc
@@ -39,14 +39,7 @@
 #include <math.h>
 #include <time.h>
 #include <sys/strace.h>
-
-/* Prototype for PdhAddEnglishCounterA in pdh.h under _WIN32_WINNT >= 0x0600 is
-   missing WINAPI */
-#undef	_WIN32_WINNT
 #include <pdh.h>
-extern "C"
-PDH_FUNCTION PdhAddEnglishCounterA(PDH_HQUERY hQuery, LPCSTR szFullCounterPath,
-				   DWORD_PTR dwUserData, PDH_HCOUNTER *phCounter);
 
 static PDH_HQUERY query;
 static PDH_HCOUNTER counter1;
@@ -61,14 +54,31 @@ static bool load_init (void)
   if (!tried) {
     tried = true;
 
-    if (!((PdhOpenQueryA (NULL, 0, &query) == ERROR_SUCCESS) &&
-	  (PdhAddEnglishCounterA (query, "\\Processor(_Total)\\% Processor Time",
-				  0, &counter1) == ERROR_SUCCESS) &&
-	  (PdhAddEnglishCounterA (query, "\\System\\Processor Queue Length",
-				  0, &counter2) == ERROR_SUCCESS))) {
-      debug_printf("loadavg PDH initialization failed\n");
-      return false;
-    }
+    PDH_STATUS status;
+
+    status = PdhOpenQueryW (NULL, 0, &query);
+    if (status != STATUS_SUCCESS)
+      {
+	debug_printf ("PdhOpenQueryW, status %y", status);
+	return false;
+      }
+    status = PdhAddEnglishCounterW (query,
+				    L"\\Processor(_Total)\\% Processor Time",
+				    0, &counter1);
+    if (status != STATUS_SUCCESS)
+      {
+	debug_printf ("PdhAddEnglishCounterW(time), status %y", status);
+	return false;
+      }
+    status = PdhAddEnglishCounterW (query,
+				    L"\\System\\Processor Queue Length",
+				    0, &counter2);
+
+    if (status != STATUS_SUCCESS)
+      {
+	debug_printf ("PdhAddEnglishCounterW(queue length), status %y", status);
+	return false;
+      }
 
     mutex = CreateMutex(&sec_all_nih, FALSE, "cyg.loadavg.mutex");
     if (!mutex) {



More information about the Cygwin-cvs mailing list