return process_pool_->IsPrepared();
}
+void LoaderExecutor::DisposeCandidateProcess() {
+ process_pool_->Dispose();
+ process_pool_->SetTimer();
+}
+
void LoaderExecutor::OnExecution() {
std::vector<char*> loader_argv(loader_argv_.size() + 1);
int loader_argc = loader_argv_.size();
#include <utility>
#include "launchpad-process-pool/config.hh"
+#include "launchpad-process-pool/loader_executor.hh"
#include "launchpad-process-pool/loader_factory.hh"
#include "launchpad-process-pool/log_private.hh"
context->Prepare();
}
}
+
+ LoaderExecutor::GetInst().DisposeCandidateProcess();
}
void LoaderManager::OnMemoryStatusChanged(bool low_memory,
}
ProcessPool::~ProcessPool() {
- while (!queue_.empty()) {
- auto process = std::move(queue_.front());
- queue_.pop();
- process->Kill();
- }
+ Dispose();
}
bool ProcessPool::IsPrepared() const {
return process->GetPid();
}
+void ProcessPool::Dispose() {
+ while (!queue_.empty()) {
+ auto process = std::move(queue_.front());
+ queue_.pop();
+ process->Kill();
+ _D("Kill process(%d)", process->GetPid());
+ }
+
+ UnsetTimer();
+}
+
ProcessPool::Process::Process(pid_t pid, int fd)
: pid_(pid), socket_(new Socket(fd)) {
}
timer_ = g_timeout_add(1000, OnTimeout, this);
}
+void ProcessPool::UnsetTimer() {
+ if (timer_ != 0) {
+ g_source_remove(timer_);
+ timer_ = 0;
+ }
+}
+
gboolean ProcessPool::OnTimeout(gpointer user_data) {
auto* process_pool = static_cast<ProcessPool*>(user_data);
process_pool->PrepareProcess();
bool IsPrepared() const;
pid_t Execute(std::shared_ptr<AppPacket> app_packet);
+ void Dispose();
+ void SetTimer();
private:
class Process {
};
void OnExecution() override;
-
+ void UnsetTimer();
void PrepareProcess();
int WaitForRequest(std::unique_ptr<Socket> socket);
- void SetTimer();
static gboolean OnTimeout(gpointer user_data);
private: