Fix Mach host port leaks in OSX
authorSridhar Periyasamy <sridhper@microsoft.com>
Wed, 22 Jul 2015 19:49:25 +0000 (12:49 -0700)
committerSridhar Periyasamy <sridhper@microsoft.com>
Wed, 22 Jul 2015 19:49:25 +0000 (12:49 -0700)
- Add return value check for "host_get_clock_service".
- Fix host port leaks in GetTickCount64 and GlobalMemoryStatusEx.

src/pal/src/misc/sysinfo.cpp
src/pal/src/misc/time.cpp

index aece529..9140fab 100644 (file)
@@ -286,6 +286,7 @@ GlobalMemoryStatusEx(
                 lpBuffer->dwMemoryLoad = (DWORD)((used_memory * 100) / lpBuffer->ullTotalPhys);
             }
         }
+        mach_port_deallocate(mach_task_self(), mach_port);
 #endif // __APPLE__
     }
 
index 5ecaff4..d5065db 100644 (file)
@@ -280,14 +280,22 @@ GetTickCount64()
         kern_return_t machRet;
         clock_serv_t clock;
         mach_timespec_t mts;
+        host_t host = mach_host_self();
 
-        host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &clock);
-        if((machRet = clock_get_time(clock, &mts)) != KERN_SUCCESS)
+        if((machRet = host_get_clock_service(host, SYSTEM_CLOCK, &clock)) != KERN_SUCCESS)
         {
-            ASSERT("clock_get_time() failed: %d\n", machRet);
+            ASSERT("host_get_clock_service() failed: %s\n", mach_error_string(machRet));
             goto EXIT;
         }
+        machRet = clock_get_time(clock, &mts);
+        mach_port_deallocate(mach_task_self(), host);
         mach_port_deallocate(mach_task_self(), clock);
+
+        if(machRet != KERN_SUCCESS)
+        {
+            ASSERT("clock_get_time() failed: %s\n", mach_error_string(machRet));
+            goto EXIT;
+        }
         retval = (mts.tv_sec * tccSecondsToMillieSeconds)+(mts.tv_nsec / tccMillieSecondsToNanoSeconds);
     }
 #elif HAVE_GETHRTIME