Fix double ready bug for channel, fixes #25
This commit is contained in:
parent
7ae4f9c5ff
commit
a93b88697d
|
|
@ -76,6 +76,7 @@ private:
|
|||
*/
|
||||
enum {
|
||||
state_connected,
|
||||
state_ready,
|
||||
state_closing,
|
||||
state_closed
|
||||
} _state = state_closed;
|
||||
|
|
@ -171,7 +172,7 @@ public:
|
|||
_readyCallback = callback;
|
||||
|
||||
// direct call if channel is already ready
|
||||
if (_state == state_connected) callback();
|
||||
if (_state == state_ready) callback();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -188,7 +189,7 @@ public:
|
|||
_errorCallback = callback;
|
||||
|
||||
// direct call if channel is already in error state
|
||||
if (_state != state_connected) callback("Channel is in error state");
|
||||
if (!connected()) callback("Channel is in error state");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -217,7 +218,7 @@ public:
|
|||
*/
|
||||
bool connected()
|
||||
{
|
||||
return _state == state_connected;
|
||||
return _state == state_connected || _state == state_ready;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -541,6 +542,9 @@ public:
|
|||
// callbacks could destroy us, so monitor it
|
||||
Monitor monitor(this);
|
||||
|
||||
// if we are still in connected state we are now ready
|
||||
if (_state == state_connected) _state = state_ready;
|
||||
|
||||
// inform handler
|
||||
if (_readyCallback) _readyCallback();
|
||||
|
||||
|
|
|
|||
|
|
@ -192,7 +192,7 @@ Deferred &ChannelImpl::rollbackTransaction()
|
|||
Deferred &ChannelImpl::close()
|
||||
{
|
||||
// this is completely pointless if not connected
|
||||
if (_state != state_connected) return push(std::make_shared<Deferred>(_state == state_closing));
|
||||
if (!connected()) return push(std::make_shared<Deferred>(_state == state_closing));
|
||||
|
||||
// send a channel close frame
|
||||
auto &handler = push(ChannelCloseFrame(_id));
|
||||
|
|
|
|||
Loading…
Reference in New Issue