This is an automated email from the ASF dual-hosted git repository. cliffjansen pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
The following commit(s) were added to refs/heads/master by this push: new 31a5cd2 PROTON-2277: maintain some extra epoll related state to aid debugging 31a5cd2 is described below commit 31a5cd2e3f162cff25ee2b7b2cf54f4a93fa6aa0 Author: Cliff Jansen <cliffjan...@apache.org> AuthorDate: Fri Sep 18 10:51:35 2020 -0700 PROTON-2277: maintain some extra epoll related state to aid debugging --- c/src/proactor/epoll-internal.h | 6 ++++++ c/src/proactor/epoll.c | 28 ++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/c/src/proactor/epoll-internal.h b/c/src/proactor/epoll-internal.h index 78cad14..c0c2b68 100644 --- a/c/src/proactor/epoll-internal.h +++ b/c/src/proactor/epoll-internal.h @@ -190,6 +190,8 @@ struct pn_proactor_t { int earmark_count; bool earmark_drain; bool sched_wakes_pending; + // For debugging help for core dumps with optimized code. + pn_event_type_t current_event_type; // Mostly read only: after init or once thread_count stabilizes pn_collector_t *collector __attribute__((aligned(64))); @@ -247,6 +249,10 @@ typedef struct pconnection_t { bool io_doublecheck; /* callbacks made and new IO may have arrived */ bool sched_timeout; char addr_buf[1]; + // For debugging help for core dumps with optimized code. + pn_event_type_t current_event_type; + uint32_t process_args; + uint32_t process_events; } pconnection_t; /* diff --git a/c/src/proactor/epoll.c b/c/src/proactor/epoll.c index 1e693fe..01d9db8 100644 --- a/c/src/proactor/epoll.c +++ b/c/src/proactor/epoll.c @@ -1012,7 +1012,10 @@ static pn_event_t *pconnection_batch_next(pn_event_batch_t *batch) { } } } - if (e) pc->output_drained = false; + if (e) { + pc->output_drained = false; + pc->current_event_type = pn_event_type(e); + } return e; } @@ -1074,23 +1077,34 @@ static inline void pconnection_rearm(pconnection_t *pc, int wanted_now) { /* Only call when context switch is imminent. Sched lock is highly contested. */ // Call with both context and sched locks. static bool pconnection_sched_sync(pconnection_t *pc, bool *timerfd_fired) { + uint32_t sync_events = 0; + uint32_t sync_args = 0; *timerfd_fired = false; if (pc->sched_timeout) { *timerfd_fired = true;; pc->timer_armed = false; pc->sched_timeout = false; + sync_args |= (1 << 1); } if (pc->psocket.sched_io_events) { pc->new_events = pc->psocket.sched_io_events; pc->psocket.sched_io_events = 0; pc->current_arm = 0; // or outside lock? + sync_events = pc->new_events; } if (pc->context.sched_wake) { pc->context.sched_wake = false; wake_done(&pc->context); + sync_args |= 1; } pc->context.sched_pending = false; + if (sync_args || sync_events) { + // Only replace if poller has found new work for us. + pc->process_args = sync_args; + pc->process_events = sync_events; + } + // Indicate if there are free proactor threads pn_proactor_t *p = pc->context.proactor; return p->poller_suspended || p->suspend_list_head; @@ -1233,7 +1247,10 @@ static pn_event_batch_t *pconnection_process(pconnection_t *pc, uint32_t events, bool waking = false; bool tick_required = false; bool immediate_write = false; - + if (!topup) { + pc->process_events = events; + pc->process_args = (timeout << 1) | sched_wake; + } // Don't touch data exclusive to working thread (yet). if (timeout) { rearm_timer = true; @@ -2206,8 +2223,11 @@ static pn_event_t *proactor_batch_next(pn_event_batch_t *batch) { lock(&p->context.mutex); proactor_update_batch(p); pn_event_t *e = pn_collector_next(p->collector); - if (e && pn_event_type(e) == PN_PROACTOR_TIMEOUT) - p->timeout_processed = true; + if (e) { + p->current_event_type = pn_event_type(e); + if (p->current_event_type == PN_PROACTOR_TIMEOUT) + p->timeout_processed = true; + } unlock(&p->context.mutex); return pni_log_event(p, e); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org