qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Arnaud Simon <asi...@redhat.com>
Subject Re: MessageListenerMultiConsumerTest deadlock when run in 0-10 code path using ant
Date Mon, 03 Mar 2008 12:45:20 GMT

On Mon, 2008-03-03 at 12:03 +0100, Arnaud Simon wrote:
> Rafael is absolutely right, Session.close is holding a lock on
> _messageDeliveryLock only to prevent messages being delivered to
> consumers when the session is closing (note that this lock should also
> be held when consumer are closing, see Qpid-812). There is however no
> reason for the dispatcher thread to keep a lock on _lock when
> dispatching a message. _lock is used for stopping/starting the
> dispatcher thread and _messageDeliveryLock for preventing message
> delivery. So, we should change the run method of dispatcher for
> releasing _lock and rollback and rejectPending for synchronizing on
> _messageDeliveryLock. 

> Note that this deadlock situation would not happen with 0.8 as an
> external thread is calling rejectPending but (if the dispatcher is
> trying to dispatch a message) this thread will need to wait until
> close
> finishes and will create a new dispatcher thread that will not be
> closed.

I was wrong actually the deadlock exists but the close operation will
eventually throw an exception as the synchronous operation sendCancel is
timing out. 

View raw message