• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

コミットメタ情報

リビジョン03828c9e54baf372809a50926c80b090b87db724 (tree)
日時2014-02-18 14:31:10
作者Hiroaki Nakano <nakano.hiroaki@nttc...>
コミッターHiroaki Nakano

ログメッセージ

#xxxxx virtual serviceスレッドのVS削除時の終了と削除

l7directord stopによってVirtual Service削除されたあとも
Virtual Serviceスレッドが終了・削除されないため、
l7directord restartを繰り返すとメモリリークを起こしていたのを
修正。

Signed-off-by: Hiroaki Nakano <nakano.hiroaki@nttcom.co.jp>

変更サマリ

差分

--- a/l7vsd/include/virtualservice.h
+++ b/l7vsd/include/virtualservice.h
@@ -191,6 +191,9 @@ public:
191191 const static int SESSIONPOOL_ALERT_OFF_SIZE_DEFAULT = 8;
192192
193193 static const int IO_SERVICE_THREADS_NUM = 1;
194+
195+ boost::thread *tg;
196+
194197 protected:
195198
196199 struct parameter_data {
--- a/l7vsd/src/l7vsd.cpp
+++ b/l7vsd/src/l7vsd.cpp
@@ -254,7 +254,7 @@ void l7vsd::add_virtual_service(const virtualservice_element *in_vselement, e
254254 try {
255255
256256 // create thread and run
257- vs_threads.create_thread(boost::bind(&virtual_service::run, vsptr));
257+ (*vsptr).tg = vs_threads.create_thread(boost::bind(&virtual_service::run, vsptr));
258258
259259 } catch (...) {
260260 std::stringstream buf;
@@ -357,6 +357,9 @@ void l7vsd::del_virtual_service(const virtualservice_element *in_vselement, e
357357 if (vslist.end() != vsitr) {
358358 // vs stop
359359 (*vsitr)->stop();
360+ boost::thread *p = (*vsitr)->tg;
361+ p->join();
362+ vs_threads.remove_thread(p);
360363 // vs finalize
361364 (*vsitr)->finalize(err);
362365