Create specialized gates to prevent deadlock on general gate
authorRobert Tivy <rtivy@ti.com>
Thu, 7 May 2015 22:09:08 +0000 (15:09 -0700)
committerRobert Tivy <rtivy@ti.com>
Fri, 8 May 2015 00:11:40 +0000 (17:11 -0700)
commite867ecab39eafad65d295949132607b8f08b43e3
treea21e9639f5d8640b9b51d2f4789390c9a09e38fb
parentf541552ff0ff53c8aced8799b22fd472cf162a8c
Create specialized gates to prevent deadlock on general gate

The MessageQ module was using a single gate for all critical sections.
Since MessageQ functions are called by TransportRpmsg's listener
thread while another thread is inside the general gate, it's necessary
to have finer-grained gating in MessageQ.

Create a seqNumGate to protect the module's seqNum modifications, so
that MessagQ_alloc can be called by the transport's thread.

Create a msgListGate to protect a MessageQ_Object's msgList, so that
MessageQ_put can be called by the transport's thread.

Change module's general gate to be recursive, so that _MessageQ_grow
can be called from within MessageQ_create's gated community.
linux/src/api/MessageQ.c