Latest commit 9598b43 Mar 1, 2016 @vitaly-krugl vitaly-krugl Fixed channel-related bugs discovered through code review in Channel
and Connection classes; implemented new tests to verify fixes:

    - When closing a Channel, skip auto-cancellation of consumers that are already being
      cancelled.
    - Fix race condition, whereby Channel.Close comes in from broker while the channel
      is in CLOSING state expecting Channel.CloseOk, by waiting for CloseOk before
      notifying user and cleaning up, to make sure that channel number won't
      get reused before the expected CloseOk arrives.
    - Fixed basic_cancel and confirm_delivery with nowait=True (used to choke with
      ValueError in Channel._rpc).
    - When connection dies while unclosed channels remain, Connection._on_terminate now
      calls Channel._on_close_meta to properly clean up the remaining channels.
    - Fixed Channel.close to work with channel that is in the OPENING state. This allows
      Connection.close to properly get all channels closed, not just the ones in OPEN
      state. And it seems reasonable in general for it to work this way. If channel is
      OPENING, transition to CLOSING and suppress the incoming Channel.OpenOk.

Behavior changes:
    - Removed the deprecated `type` arg from `BlockingChannel.exchange_declare` and
      `Channel.exchange_declare`.
    - In Connection._deliver_frame_to_channel(), consider it a critical protocol
      breach if received frame for channel not in our channel set. Log it at
      critical level, instead of trying to screen for Basic.Deliver and reject.
    - In Channel.close(), if channel is already CLOSING, raise ChannelAlreadyClosing
      exception. Legacy behavior used to raise ChannelClosed.
    - Raise `ConnectionClosed` in `Connection.channel()` if connection is not in OPEN
      state.

Removed obsolete functionality:
    - Removed Channel._pending and related code, since this functionality was in support
      of the legacy BlockingConnection, which has since been rewritten.
    - Removed _write_lock from Connection; Connection is not thread-safe by design,
      and the lock was not protecting all output buffer accesses anyway.
    - In Channel constructor, remove the default value from on_open_callback, since
      Channel is only instantiated by Connection, which always passes this arg

Cleaned up logic related to auto-closing of channels while closing a connection.

When cancelling a consumer with nowait=True, remove its consumer entry from
self._consumers to help garbage collection; otherwise, it wouldn't get purged
until the channel is closed.

Implemented a dedicated method Channel._on_close_meta to handle the meta-close
request from Connection._on_terminate logic to avoid overloading the Channel.Close method
handler's logic.

More unit test for Channel and Connection that cover channel and connection closing
procedures.

Fix a couple of invalid heartbeat and tornado unit test methods.

Cleaned up method_frame vs. method args in Channel and fixed docstrings; in a number of
cases an arg named method_frame was being used to pass an AMQP method prior to this
change.

Misc. docstring fixup in both Channel and Connection classes concerning arg types, return
values and raised exceptions.

Renamed channel.ContentFrameDispatcher as channel.CotentFrameAssembler
to reflect its actual functionality, and renamed the corresponding member to
`Channel._content_assembler`.

Cleaned up many pylint findings in related modules and tests.

Fixed several style issues per @gmr's code review feedback in PR #712.
Also, tagged the backpressure_detection option as deprecated in connection parameters
per @gmr's suggestion in PR #714.