リビジョン | 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>
@@ -191,6 +191,9 @@ public: | ||
191 | 191 | const static int SESSIONPOOL_ALERT_OFF_SIZE_DEFAULT = 8; |
192 | 192 | |
193 | 193 | static const int IO_SERVICE_THREADS_NUM = 1; |
194 | + | |
195 | + boost::thread *tg; | |
196 | + | |
194 | 197 | protected: |
195 | 198 | |
196 | 199 | struct parameter_data { |
@@ -254,7 +254,7 @@ void l7vsd::add_virtual_service(const virtualservice_element *in_vselement, e | ||
254 | 254 | try { |
255 | 255 | |
256 | 256 | // 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)); | |
258 | 258 | |
259 | 259 | } catch (...) { |
260 | 260 | std::stringstream buf; |
@@ -357,6 +357,9 @@ void l7vsd::del_virtual_service(const virtualservice_element *in_vselement, e | ||
357 | 357 | if (vslist.end() != vsitr) { |
358 | 358 | // vs stop |
359 | 359 | (*vsitr)->stop(); |
360 | + boost::thread *p = (*vsitr)->tg; | |
361 | + p->join(); | |
362 | + vs_threads.remove_thread(p); | |
360 | 363 | // vs finalize |
361 | 364 | (*vsitr)->finalize(err); |
362 | 365 |