Fix segmentation fault 66/318166/1
authorHwankyu Jhun <h.jhun@samsung.com>
Mon, 13 Jan 2025 23:15:58 +0000 (08:15 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Mon, 13 Jan 2025 23:15:58 +0000 (08:15 +0900)
Before calling the method of the Client instance, we should check
whether the instance is nullptr or not.

Change-Id: I8f3baf2e09a07cfa4c5929e0f9fdd815da9be0de
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/launchpad-process-pool/hydra_loader_context.cc
src/launchpad-process-pool/launchpad.cc
src/launchpad-process-pool/loader_context.cc

index 05c7081040e1738572b41beaddc0cf3886d437cf..83f71a9d6899a0bab212939573bf4db40b79f0fe 100644 (file)
@@ -85,9 +85,11 @@ void HydraLoaderContext::Dispose() {
     hydra_pid_ = 0;
   }
 
-  ProcessPool::RemoveFdFromCloseableFds(client_socket_->GetFd());
   client_channel_.reset();
-  client_socket_.reset();
+  if (client_socket_) {
+    ProcessPool::RemoveFdFromCloseableFds(client_socket_->GetFd());
+    client_socket_.reset();
+  }
   hydra_prepared_ = false;
 }
 
index 8ee59fd5edbd8368d510127f757b51eca3d0c8fc..c2f12f50dca1b2beb5c29dc1ef5d4d1bb1d02e45 100644 (file)
@@ -46,6 +46,7 @@
 #include "launchpad-process-pool/log_private.hh"
 #include "launchpad-process-pool/memory_monitor.hh"
 #include "launchpad-process-pool/signal_manager.hh"
+#include "launchpad-process-pool/process_pool.hh"
 #include "launchpad-process-pool/tracer.hh"
 
 namespace launchpad {
@@ -224,6 +225,7 @@ bool Launchpad::OnCreate() {
     socket_.reset(GetLaunchpadSocket());
     channel_.reset(
         new IOChannel(socket_->GetFd(), IOChannel::IOCondition::IO_IN, this));
+    ProcessPool::MarkCloseableFd(socket_->GetFd());
   } catch (const Exception& e) {
     _E("Exception occurs. error: %s", e.what());
     return false;
index 0172feb7d67b93500b111865491986d5b79baf56..5079225e0e538d0f0182b654be17532d30ee4301 100644 (file)
@@ -214,9 +214,12 @@ void LoaderContext::Dispose() {
     on_boot_timer_ = 0;
   }
 
-  ProcessPool::RemoveFdFromCloseableFds(client_socket_->GetFd());
+  
   client_channel_.reset();
-  client_socket_.reset();
+  if (client_socket_) {
+    ProcessPool::RemoveFdFromCloseableFds(client_socket_->GetFd());
+    client_socket_.reset();
+  }
   prepared_ = false;
 }