qicosmos / rest_rpc

modern C++(C++11), simple, easy to use rpc framework
MIT License
1.66k stars 365 forks source link

Maybe there is deadlock in ~rcp_server()... #9

Open objects76 opened 4 years ago

objects76 commented 4 years ago

I think the lock(std::uniquelock lock(mtx)) makes deadlock in checkthread...

        ~rpc_server() {
            {
                //std::unique_lock<std::mutex> lock(mtx_);//-jjkim
                stop_check_ = true;
                cv_.notify_all();
                check_thread_->join();
            }

            {
                std::unique_lock<std::mutex> lock(sub_mtx_);
                stop_check_pub_sub_ = true;
                                     lock.unlock();//+jjkim
                sub_cv_.notify_all();
                                    pub_sub_thread_->join();
            }

            io_service_pool_.stop();
            if(thd_){
                thd_->join();
            }
        }
qicosmos commented 4 years ago

I think it's right, no deadlock here.