]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
do_kernel_showmapped: fix resource leak
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Wed, 24 Aug 2011 21:42:19 +0000 (14:42 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Wed, 24 Aug 2011 21:43:08 +0000 (14:43 -0700)
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/rbd.cc

index a18c0294ab9dc115951814ccc6df0c49ea3f4c71..b398b99d5b2f670fd2146bffb307826364b103d4 100644 (file)
@@ -36,6 +36,7 @@
 #include <stdlib.h>
 #include <sys/types.h>
 #include <time.h>
+#include <tr1/memory>
 #include <sys/ioctl.h>
 
 #include "include/rbd_types.h"
@@ -582,15 +583,15 @@ static int do_kernel_showmapped()
 {
   int r;
   const char *devices_path = "/sys/bus/rbd/devices";
-  DIR *device_dir = opendir(devices_path);
-  if (!device_dir) {
+  std::tr1::shared_ptr<DIR> device_dir(opendir(devices_path), closedir);
+  if (!device_dir.get()) {
     r = -errno;
     cerr << "Could not open " << devices_path << ": " << cpp_strerror(-r) << std::endl;
     return r;
   }
 
   struct dirent *dent;
-  dent = readdir(device_dir);
+  dent = readdir(device_dir.get());
   if (!dent) {
     r = -errno;
     cerr << "Error reading " << devices_path << ": " << cpp_strerror(-r) << std::endl;
@@ -634,7 +635,7 @@ static int do_kernel_showmapped()
 
     cout << dent->d_name << "\t" << pool << "\t" << name << "\t" << snap << "\t" << dev << std::endl;
 
-  } while ((dent = readdir(device_dir)));
+  } while ((dent = readdir(device_dir.get())));
 
   return 0;
 }