< prev index next >

src/hotspot/os/solaris/os_perf_solaris.cpp

Print this page
rev 50955 : [mq]: readdir

@@ -602,19 +602,18 @@
 
   return OS_OK;
 }
 
 int SystemProcessInterface::SystemProcesses::ProcessIterator::next_process() {
-  struct dirent* entry;
-
   if (!is_valid()) {
     return OS_ERR;
   }
 
   do {
-    if ((entry = os::readdir(_dir, _entry)) == NULL) {
-      // error
+    _entry = os::readdir(_dir);
+    if (_entry == NULL) {
+      // Error or reached end.  Could use errno to distinguish those cases.
       _valid = false;
       return OS_ERR;
     }
   } while(!is_valid_entry(_entry));
 

@@ -627,28 +626,21 @@
   _entry = NULL;
   _valid = false;
 }
 
 bool SystemProcessInterface::SystemProcesses::ProcessIterator::initialize() {
-  _dir = opendir("/proc");
-  _entry = (struct dirent*)NEW_C_HEAP_ARRAY(char, sizeof(struct dirent) + _PC_NAME_MAX + 1, mtInternal);
-  if (NULL == _entry) {
-    return false;
-  }
+  _dir = os::opendir("/proc");
+  _entry = NULL;
   _valid = true;
   next_process();
 
   return true;
 }
 
 SystemProcessInterface::SystemProcesses::ProcessIterator::~ProcessIterator() {
-  if (_entry != NULL) {
-    FREE_C_HEAP_ARRAY(char, _entry);
-  }
-
   if (_dir != NULL) {
-    closedir(_dir);
+    os::closedir(_dir);
   }
 }
 
 SystemProcessInterface::SystemProcesses::SystemProcesses() {
   _iterator = NULL;
< prev index next >