[
https://issues.apache.org/jira/browse/PROTON-2931?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18080924#comment-18080924
]
ASF GitHub Bot commented on PROTON-2931:
----------------------------------------
cliffjansen commented on code in PR #444:
URL: https://github.com/apache/qpid-proton/pull/444#discussion_r3242514939
##########
c/src/proactor/epoll_raw_connection.c:
##########
@@ -211,6 +224,9 @@ static void praw_initiate_cleanup(praw_connection_t *prc) {
shutdown(prc->psocket.epoll_io.fd, SHUT_RDWR);
return;
}
+ if (prc->name_lookup_pending) {
Review Comment:
doh!
##########
c/src/proactor/epoll_raw_connection.c:
##########
@@ -224,21 +240,30 @@ pn_raw_connection_t *pn_raw_connection(void) {
return &conn->raw_connection;
}
-// Call from pconnection_process with task lock held.
-// Return true if the socket is connecting and there are no Proton events to
deliver.
-static bool praw_connection_first_connect_lh(praw_connection_t *prc) {
+// Call from pconnection_process with no locks.
+// Callback may complete before pni_name_lookup_start returns.
+static void praw_connection_first_connect(praw_connection_t *prc) {
const char *host;
const char *port;
pn_proactor_t *p = prc->task.proactor;
+ bool notify = false;
Review Comment:
done
> Epoll proactor has race conditions with the async c-ares name resolver library
> ------------------------------------------------------------------------------
>
> Key: PROTON-2931
> URL: https://issues.apache.org/jira/browse/PROTON-2931
> Project: Qpid Proton
> Issue Type: Bug
> Components: proton-c
> Affects Versions: proton-c-0.41.0
> Reporter: Clifford Jansen
> Assignee: Clifford Jansen
> Priority: Blocker
>
> If the c-ares callback is very quick, the pn_raw_connection_t can sometimes
> fail to schedule itself and hang while still in the connecting phase. This
> can be easily reproduced with a ulimit for open files of 1024 or less and the
> following reproducer.
> https://github.com/fgiorgetti/router-locust
> Conversely, if the callback is extremely slow, the connection can wind up and
> free resources before the callback tries to reference through an invalid
> pointer. The connection should remember if a callback is pending and defer
> any cleanup until this concludes. This applies to raw and AMQP connections.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]