]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2507] Replace CriticalSection with mutex lock in stat_cmds
authorThomas Markwalder <tmark@isc.org>
Mon, 19 Sep 2022 13:13:09 +0000 (09:13 -0400)
committerThomas Markwalder <tmark@isc.org>
Mon, 19 Sep 2022 13:13:09 +0000 (09:13 -0400)
src/hooks/dhcp/stat_cmds/stat_cmds.cc
    StatCmds::statLease4GetHandler(CalloutHandle& handle)
    StatCmds::statLease6GetHandler(CalloutHandle& handle)
    - removed MultiThreadingCriticalSection instance

src/lib/dhcpsrv/memfile_lease_mgr.cc
    Memfile_LeaseMgr::startLeaseStatsQuery4()
    Memfile_LeaseMgr::startSubnetLeaseStatsQuery4)
    Memfile_LeaseMgr::startLeaseStatsQuery6()
    Memfile_LeaseMgr::startSubnetLeaseStatsQuery6()
    Memfile_LeaseMgr::startSubnetRangeLeaseStatsQuery6()
    - lock mutex when runninng in MT

src/hooks/dhcp/stat_cmds/stat_cmds.cc
src/lib/dhcpsrv/memfile_lease_mgr.cc

index 8950bc928f651ff19a558ad51da87534b63d6b8e..c40deca3a06c0effb70cc72bfe71451641428816 100644 (file)
@@ -718,7 +718,6 @@ int
 StatCmds::statLease4GetHandler(CalloutHandle& handle) {
     try {
         LeaseStatCmdsImpl impl;
-        MultiThreadingCriticalSection cs;
         return (impl.statLease4GetHandler(handle));
     } catch (const std::exception& ex) {
 
@@ -732,7 +731,6 @@ int
 StatCmds::statLease6GetHandler(CalloutHandle& handle) {
     try {
         LeaseStatCmdsImpl impl;
-        MultiThreadingCriticalSection cs;
         return (impl.statLease6GetHandler(handle));
     } catch (const std::exception& ex) {
 
index afb32598407874b2ed14633c7bd940a78ebd5a91..9352cf9746be6fbeceee729ba85b10c578acb263 100644 (file)
@@ -1990,14 +1990,26 @@ Memfile_LeaseMgr::lfcExecute(boost::shared_ptr<LeaseFileType>& lease_file) {
 LeaseStatsQueryPtr
 Memfile_LeaseMgr::startLeaseStatsQuery4() {
     LeaseStatsQueryPtr query(new MemfileLeaseStatsQuery4(storage4_));
-    query->start();
+    if (MultiThreadingMgr::instance().getMode()) {
+        std::lock_guard<std::mutex> lock(*mutex_);
+        query->start();
+    } else {
+        query->start();
+    }
+
     return(query);
 }
 
 LeaseStatsQueryPtr
 Memfile_LeaseMgr::startSubnetLeaseStatsQuery4(const SubnetID& subnet_id) {
     LeaseStatsQueryPtr query(new MemfileLeaseStatsQuery4(storage4_, subnet_id));
-    query->start();
+    if (MultiThreadingMgr::instance().getMode()) {
+        std::lock_guard<std::mutex> lock(*mutex_);
+        query->start();
+    } else {
+        query->start();
+    }
+
     return(query);
 }
 
@@ -2006,21 +2018,39 @@ Memfile_LeaseMgr::startSubnetRangeLeaseStatsQuery4(const SubnetID& first_subnet_
                                                    const SubnetID& last_subnet_id) {
     LeaseStatsQueryPtr query(new MemfileLeaseStatsQuery4(storage4_, first_subnet_id,
                                                          last_subnet_id));
-    query->start();
+    if (MultiThreadingMgr::instance().getMode()) {
+        std::lock_guard<std::mutex> lock(*mutex_);
+        query->start();
+    } else {
+        query->start();
+    }
+
     return(query);
 }
 
 LeaseStatsQueryPtr
 Memfile_LeaseMgr::startLeaseStatsQuery6() {
     LeaseStatsQueryPtr query(new MemfileLeaseStatsQuery6(storage6_));
-    query->start();
+    if (MultiThreadingMgr::instance().getMode()) {
+        std::lock_guard<std::mutex> lock(*mutex_);
+        query->start();
+    } else {
+        query->start();
+    }
+
     return(query);
 }
 
 LeaseStatsQueryPtr
 Memfile_LeaseMgr::startSubnetLeaseStatsQuery6(const SubnetID& subnet_id) {
     LeaseStatsQueryPtr query(new MemfileLeaseStatsQuery6(storage6_, subnet_id));
-    query->start();
+    if (MultiThreadingMgr::instance().getMode()) {
+        std::lock_guard<std::mutex> lock(*mutex_);
+        query->start();
+    } else {
+        query->start();
+    }
+
     return(query);
 }
 
@@ -2029,7 +2059,13 @@ Memfile_LeaseMgr::startSubnetRangeLeaseStatsQuery6(const SubnetID& first_subnet_
                                                    const SubnetID& last_subnet_id) {
     LeaseStatsQueryPtr query(new MemfileLeaseStatsQuery6(storage6_, first_subnet_id,
                                                          last_subnet_id));
-    query->start();
+    if (MultiThreadingMgr::instance().getMode()) {
+        std::lock_guard<std::mutex> lock(*mutex_);
+        query->start();
+    } else {
+        query->start();
+    }
+
     return(query);
 }