]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
blk/spdk/NVMEDevice.cc: fix a memory leak issue 36629/head
authorYuan Lu <yuan.y.lu@intel.com>
Fri, 14 Aug 2020 19:11:30 +0000 (19:11 +0000)
committerYuan Lu <yuan.y.lu@intel.com>
Fri, 14 Aug 2020 19:34:56 +0000 (19:34 +0000)
Signed-off-by: Yuan Lu <yuan.y.lu@intel.com>
src/blk/spdk/NVMEDevice.cc

index 7f3cde079945e3d13f4960f34ac02d08bf1be046..be417bbdc353b417d260d33cc06547c0b223f69c 100644 (file)
@@ -47,8 +47,6 @@
 #undef dout_prefix
 #define dout_prefix *_dout << "bdev(" << sn << ") "
 
-thread_local SharedDriverQueueData *queue_t;
-
 static constexpr uint16_t data_buffer_default_num = 1024;
 
 static constexpr uint32_t data_buffer_size = 8192;
@@ -757,8 +755,6 @@ void NVMEDevice::close()
 {
   dout(1) << __func__ << dendl;
 
-  delete queue_t;
-  queue_t = nullptr;
   name.clear();
   driver->remove_device(this);
 
@@ -796,9 +792,9 @@ void NVMEDevice::aio_submit(IOContext *ioc)
     ceph_assert(ioc->num_pending.load() == 0);  // we should be only thread doing this
     // Only need to push the first entry
     ioc->nvme_task_first = ioc->nvme_task_last = nullptr;
-    if (!queue_t)
-       queue_t = new SharedDriverQueueData(this, driver);
-    queue_t->_aio_handle(t, ioc);
+
+    thread_local SharedDriverQueueData queue_t = SharedDriverQueueData(this, driver);
+    queue_t._aio_handle(t, ioc);
   }
 }