From 13c503b73b4ecc8ce4a6e344f9ac15202985d686 Mon Sep 17 00:00:00 2001 From: liuxiaolong <liuxiaolong@aiotlink.com> Date: 星期二, 20 七月 2021 19:48:58 +0800 Subject: [PATCH] fix memory leak --- utest/util.h | 149 +++++++++++++++++++++++++++++++------------------ 1 files changed, 93 insertions(+), 56 deletions(-) diff --git a/utest/util.h b/utest/util.h index ac1d58d..53f747f 100644 --- a/utest/util.h +++ b/utest/util.h @@ -19,81 +19,118 @@ #ifndef UTIL_W8A0OA5U #define UTIL_W8A0OA5U -#include <functional> -#include <vector> -#include <thread> -#include <stdlib.h> +#include "bh_util.h" +#include "shm.h" +#include "topic_node.h" +#include <boost/noncopyable.hpp> +#include <boost/test/unit_test.hpp> +#include <boost/timer/timer.hpp> #include <chrono> +#include <functional> +#include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> -#include <boost/noncopyable.hpp> -#include <boost/timer/timer.hpp> -#include <boost/test/unit_test.hpp> -#include <boost/date_time/posix_time/posix_time.hpp> -#include "shm.h" -#include "shm_queue.h" -#include "msg.h" -#include "bh_util.h" - -using namespace boost::posix_time; -inline ptime Now() { return second_clock::universal_time(); }; +#include <thread> +#include <vector> using namespace std::chrono_literals; +using namespace std::chrono; + +template <class D> +inline void Sleep(D d, bool print = true) +{ + if (print) { + printf("sleep for %ld ms\n", std::chrono::duration_cast<std::chrono::milliseconds>(d).count()); + } + std::this_thread::sleep_for(d); +} typedef std::function<void(void)> FuncVV; -class ScopeCall : private boost::noncopyable { - FuncVV f_; +class ScopeCall : private boost::noncopyable +{ + FuncVV f_; + public: - ScopeCall(FuncVV f):f_(f) { f_(); } - ~ScopeCall() { f_(); } + ScopeCall(FuncVV f) : + f_(f) { f_(); } + ~ScopeCall() { f_(); } }; -class ThreadManager { - std::vector<std::thread> threads_; +class ThreadManager +{ + std::vector<std::thread> threads_; + public: - ~ThreadManager() { WaitAll(); } - template <class T, class...P> - void Launch(T t, P...p) { threads_.emplace_back(t, p...); } - void WaitAll() { - for (auto &t : threads_) { - if (t.joinable()) { - t.join(); - } - } - } + ~ThreadManager() { WaitAll(); } + template <class T, class... P> + void Launch(T &&t, P &&...p) { threads_.emplace_back(std::forward<decltype(t)>(t), std::forward<decltype(p)>(p)...); } + void WaitAll() + { + for (auto &t : threads_) { + if (t.joinable()) { + t.join(); + } + } + } }; -class ProcessManager { - std::vector<pid_t> procs_; +class ProcessManager +{ + std::vector<pid_t> procs_; + public: - ~ProcessManager() { WaitAll(); } - template <class T, class ...P> - void Launch(T t, P...p) { - auto pid = fork(); - if (pid == 0) { - // child - t(p...); - exit(0); - } else if (pid != -1) { // Ok - procs_.push_back(pid); - } - }; - void WaitAll() { - for (auto &pid: procs_) { - int status = 0; - int options = WUNTRACED | WCONTINUED; - waitpid(pid, &status, options); - } - procs_.clear(); - } + ~ProcessManager() { WaitAll(); } + template <class T, class... P> + void Launch(T t, P... p) + { + auto pid = fork(); + if (pid == 0) { + // child + t(p...); + exit(0); + } else if (pid != -1) { // Ok + procs_.push_back(pid); + } + }; + void WaitAll() + { + for (auto &pid : procs_) { + int status = 0; + int options = WUNTRACED | WCONTINUED; + waitpid(pid, &status, options); + } + procs_.clear(); + } }; using namespace bhome_shm; using namespace bhome_msg; struct ShmRemover { - std::string name_; - ShmRemover(const std::string &name):name_(name) { SharedMemory::Remove(name_); } - ~ShmRemover() { SharedMemory::Remove(name_); } + std::string name_; + ShmRemover(const std::string &name) : + name_(name) { SharedMemory::Remove(name_); } + ~ShmRemover() { SharedMemory::Remove(name_); } }; +class DemoNode : public TopicNode +{ + std::string id_; + +public: + DemoNode(const std::string &id, SharedMemory &shm) : + TopicNode(shm), id_(id) { Init(); } + void Init() + { + ProcInfo proc; + proc.set_proc_id(id_); + MsgCommonReply reply_body; + + if (!Register(proc, reply_body, 1000)) { + printf("node %s register failed\n", id_.c_str()); + } + } +}; + +bhome_shm::SharedMemory &TestShm(); + #endif // end of include guard: UTIL_W8A0OA5U -- Gitblit v1.8.0