I understand it this way, too

Bozzo
On Mar 19, 2015 8:35 PM, "Alan Conway" <acon...@redhat.com> wrote:

> I don't think I'm saying anything new here, just want to confirm my
> understanding of the thread-safety rules of the proton library.
>
> Separate pn_connections can be processed concurrently in separate
> threads. A given pn_connection_t must NOT be used concurrently.
>
> All objects associated with a connection must be handled in the same
> thread context that handles that connection. This is because calls on
> all objects can potentially find their way back to the shared connection
> object. For example you can get all the way from a delivery to the
> containing connection:
>
> pn_delivery_t *pn_work_next(pn_delivery_t *delivery)
> {
>   assert(delivery);
>
>   if (delivery->work)
>     return delivery->work_next;
>   else
>     return pn_work_head(delivery->link->session->connection);
> }
>
> The exception (I think/hope) is pn_message_t. pn_message_t does not (I
> think) have any pointers to shared objects. So once a pn_message_t has
> been decoded it IS ok to handle separate pn_message_t objects in
> separate threads (provided any individual pn_message_t instance is never
> used concurrently of course)
>
> Is that about correct?
>
> Cheers,
> Alan.
>
>

Reply via email to