[ 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