server: detect duplicate channelCreated() calls

This commit is contained in:
Michael Davidsaver
2019-02-13 21:06:19 -08:00
parent d52d8cf5d4
commit 22622e91a9
2 changed files with 6 additions and 2 deletions

View File

@@ -792,8 +792,7 @@ ServerChannelRequesterImpl::ServerChannelRequesterImpl(const Transport::shared_p
_channelName(channelName),
_cid(cid),
_css(css),
_status(),
_mutex()
_created(false)
{
}
@@ -811,6 +810,8 @@ ChannelRequester::shared_pointer ServerChannelRequesterImpl::create(
void ServerChannelRequesterImpl::channelCreated(const Status& status, Channel::shared_pointer const & channel)
{
if(_created)
throw std::logic_error("Channel already created");
if(detail::BlockingServerTCPTransportCodec::shared_pointer transport = _transport.lock())
{
ServerChannel::shared_pointer serverChannel;
@@ -847,6 +848,7 @@ void ServerChannelRequesterImpl::channelCreated(const Status& status, Channel::s
Lock guard(_mutex);
_status = status;
_serverChannel = serverChannel;
_created = true;
}
TransportSender::shared_pointer thisSender = shared_from_this();
@@ -891,6 +893,7 @@ void ServerChannelRequesterImpl::channelStateChange(Channel::shared_pointer cons
ServerChannel::shared_pointer channel;
{
Lock guard(_mutex);
_created = false;
channel= dynamic_pointer_cast<ServerChannel>(_serverChannel.lock());
}