[
https://issues.apache.org/jira/browse/PROTON-1440?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15928221#comment-15928221
]
Alan Conway commented on PROTON-1440:
-------------------------------------
Your fix isn't thread safe unfortunately, as zeroing and reading the pointer
can happen concurrently which means freeing and using the pointer also can
happen concurrently. I'm working to fix that now, basically it's the moral
equivalent of your fix but instead of zeroing the pointer, we atomically mark
the pconnection_t as closed and keep it around till the pn_connection_t
expires. Adding the bool return is a nice bonus.
> pn_connection_wake to return bool status
> ----------------------------------------
>
> Key: PROTON-1440
> URL: https://issues.apache.org/jira/browse/PROTON-1440
> Project: Qpid Proton
> Issue Type: Improvement
> Components: proton-c
> Affects Versions: 0.17.0
> Reporter: Alan Conway
> Assignee: Alan Conway
> Fix For: 0.18.0
>
>
> pn_connection_wake() allows any thread to send a PN_CONNECTION_WAKE event to
> a proactor-managed connection. Currently it does not return any value, and
> the application must ensure it is not called after the PN_TRANSPORT_CLOSED
> event is processed for that connection.
> This is tricky for the application to synchronize and inconsistent with other
> pn_connection_ functions. If refcounts are used to keep a pn_connection_t in
> memory after the TRANSPORT_CLOSED, then calling wake() is an error even
> though the pn_connection_t is valid.
> Change wake to be safe as long as the pn_connection_t is valid. It returns
> true if the connection will be woken, false if it is too late.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]