[ 
https://issues.apache.org/jira/browse/PROTON-2843?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17881057#comment-17881057
 ] 

ASF GitHub Bot commented on PROTON-2843:
----------------------------------------

astitcher commented on PR #432:
URL: https://github.com/apache/qpid-proton/pull/432#issuecomment-2344213433

   This looks like it fixes the segv, but it seems to change the async nature 
of the acknowledgement which might be important in some applications for 
performance.
   It is certainly true that acknowledge's signature can return an error (and 
it currently doesn't) so that is an improvement in behaviour.
   I'm absolutely not very experienced with golang but it looks to me that the 
Inject implementation doesn't handle the case of the connection being done 
which is the fundemental issue here. Perhaps Inject needs to wrap the injected 
function similarly to InjectWait to make sure that the run queue is not done 
before running the injected function. This would not allow for an error return 
in this case, but seems to me more consonant with the existing behaviour. Maybe 
there needs to be a way to return this kind of asynch error (but maybe that's a 
much bigger API change).
   @PatrickTaibel wdyt?




> [Go] Acknowledging a message on a closed receiver results in a segmentation 
> fault
> ---------------------------------------------------------------------------------
>
>                 Key: PROTON-2843
>                 URL: https://issues.apache.org/jira/browse/PROTON-2843
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: go-binding
>            Reporter: Patrick Taibel
>            Assignee: Alan Conway
>            Priority: Major
>
> Using the {{electron}} package when acknowledging messages ({{{}Accept(){}}}, 
> {{Reject()}} or {{Release()}} on a {{{}ReceivedMessage{}}}) a segmentation 
> fault occurs if the {{Receiver}} was already closed.
> This happens because the underlying link of the receiver gets freed which, 
> according to the docs of {{pn_link_free,}} also frees any unsettled 
> deliveries.
> As the actual acknowledgement needs to run in the engine goroutine the check 
> for an active receiver has to happen inside the {{electron}} package.
> I'd suggest adding a check if the receiver is still alive in the injected 
> function in {{{}func (rm *ReceivedMessage) acknowledge(status uint64) 
> error{}}}.
> I plan to do a PR to fix this but it will take a couple of weeks until I get 
> there as this is a low priority fix on our end.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to