From ea4a503beaca191c6cd32fccbcd4523aa2c81b4f Mon Sep 17 00:00:00 2001 From: zhangwh Date: Thu, 13 Jul 2023 14:32:54 +0800 Subject: [PATCH] optimize smp quit condition, add log for trace --- src/gausskernel/process/stream/streamCore.cpp | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/gausskernel/process/stream/streamCore.cpp b/src/gausskernel/process/stream/streamCore.cpp index 9736c8b7d..b5dd52f1e 100755 --- a/src/gausskernel/process/stream/streamCore.cpp +++ b/src/gausskernel/process/stream/streamCore.cpp @@ -621,10 +621,16 @@ void StreamNodeGroup::quitSyncPoint() Assert(m_quitWaitCond >= 0); Assert(pair->expectThreadNum >= pair->createThreadNum); - if (m_quitWaitCond == 0) + if (m_quitWaitCond < 0) { + ereport(WARNING, (errmsg("Stream sub thread m_quitWaitCond invalid: %d. " + "To get backtrace detail, set backtrace_min_messages=warning.", m_quitWaitCond))); + ereport(LOG, (errmsg("Stream info, smp id: %u, m_streamEnter: %d, ThreadId: %u, m_createThreadNum: %d, m_size: %d", + u_sess->stream_cxt.smp_id, m_streamEnter, (u_sess->stream_cxt.producer_obj)->getThreadId(), m_createThreadNum, m_size))); + } + if (m_quitWaitCond <= 0) pthread_cond_broadcast(&m_cond); else { - while (m_quitWaitCond != 0) + while (m_quitWaitCond > 0) pthread_cond_wait(&m_cond, &m_mutex); } streamLock.unLock(); @@ -640,7 +646,13 @@ void StreamNodeGroup::quitSyncPoint() Assert(m_quitWaitCond >= 0); Assert(m_size >= m_createThreadNum); - if (m_quitWaitCond == 0) + if (m_quitWaitCond < 0) { + ereport(WARNING, (errmsg("Stream top consumer thread m_quitWaitCond invalid: %d. " + "To get backtrace detail, set backtrace_min_messages=warning.", m_quitWaitCond))); + ereport(LOG, (errmsg("Stream info, m_streamEnter: %d, m_createThreadNum: %d, m_size: %d", + m_streamEnter, m_createThreadNum, m_size))); + } + if (m_quitWaitCond <= 0) pthread_cond_broadcast(&m_cond); else { /* @@ -668,7 +680,7 @@ void StreamNodeGroup::quitSyncPoint() */ CHECK_FOR_INTERRUPTS(); - while (m_quitWaitCond != 0) + while (m_quitWaitCond > 0) pthread_cond_wait(&m_cond, &m_mutex); t_thrd.int_cxt.ImmediateInterruptOK = false;