diff options
author | Andrey Oleynik (GitHub) <aoleynik@luxoft.com> | 2017-12-07 15:02:39 +0200 |
---|---|---|
committer | Andriy Byzhynar <AByzhynar@luxoft.com> | 2018-01-18 12:03:51 +0200 |
commit | 88790ab9e9016df4edf87b07677b8608c89a8cfd (patch) | |
tree | ce4939dc7dda09621157688dba91669be284ea82 /src/components/transport_manager/src | |
parent | 80ab0447c4e0750bf2536409ad0f6b0a8b8c63d0 (diff) | |
download | sdl_core-88790ab9e9016df4edf87b07677b8608c89a8cfd.tar.gz |
Fixes thread stopping in case no one connected to the pipe
Diffstat (limited to 'src/components/transport_manager/src')
-rw-r--r-- | src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc b/src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc index 13cdf5698b..b790add0c4 100644 --- a/src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc +++ b/src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc @@ -83,6 +83,9 @@ IAP2USBEmulationTransportAdapter::IAP2USBEmulationTransportAdapter( IAP2USBEmulationTransportAdapter::~IAP2USBEmulationTransportAdapter() { signal_handler_->join(); + auto delegate = signal_handler_->delegate(); + signal_handler_->set_delegate(NULL); + delete delegate; threads::DeleteThread(signal_handler_); LOG4CXX_DEBUG(logger_, "Out close result: " << close(out_)); LOG4CXX_DEBUG(logger_, "Out unlink result: " << unlink(out_signals_channel)); @@ -139,6 +142,9 @@ void IAP2USBEmulationTransportAdapter::IAPSignalHandlerDelegate::threadMain() { adapter_.DoTransportSwitch(); } } + + LOG4CXX_DEBUG(logger_, "In close result: " << close(in_)); + LOG4CXX_DEBUG(logger_, "In unlink result: " << unlink(in_signals_channel)); } void IAP2USBEmulationTransportAdapter::IAPSignalHandlerDelegate:: @@ -146,8 +152,11 @@ void IAP2USBEmulationTransportAdapter::IAPSignalHandlerDelegate:: LOG4CXX_AUTO_TRACE(logger_); LOG4CXX_DEBUG(logger_, "Stopping signal handling."); run_flag_ = false; - LOG4CXX_DEBUG(logger_, "In close result: " << close(in_)); - LOG4CXX_DEBUG(logger_, "In unlink result: " << unlink(in_signals_channel)); + if (!in_) { + // To stop thread gracefully in case of no one has connected to pipe before + auto in = open(in_signals_channel, O_WRONLY); + UNUSED(in); + } } } } // namespace transport_manager::transport_adapter |