Description:
VALGRIND: '48 bytes in 1 blocks are indirectly lost in loss record 5 of 8'
COUNT: 2
FUNCTION: malloc FILES: master.err master1.err
TESTS: ndb_alter_table:ndb_binlog_discover
STACK: at 0x4A20859: malloc (vg_replace_malloc.c:149)
by 0x9348BF: EventBufData_list::add_gci_op(EventBufData_list::Gci_op) (NdbEventOperationImpl.cpp:2607)
by 0x93A9A6: NdbEventBuffer::insertDataL(NdbEventOperationImpl*, SubTableData const*, LinearSectionPtr*) (NdbEventOperationImpl.hpp:264)
by 0x93B194: NdbEventBuffer::insert_event(NdbEventOperationImpl*, SubTableData&, LinearSectionPtr*, unsigned&) (NdbEventOperationImpl.cpp:1619)
by 0x93B2F6: NdbEventBuffer::report_node_failure(unsigned) (NdbEventOperationImpl.cpp:1688)
by 0x91F270: Ndb::report_node_failure_completed(unsigned) (Ndbif.cpp:273)
by 0x91F37D: Ndb::statusMessage(void*, unsigned, bool, bool) (Ndbif.cpp:238)
by 0x992FB2: TransporterFacade::ReportNodeFailureComplete(unsigned short) (TransporterFacade.cpp:836)
by 0x994D32: ClusterMgr::execNF_COMPLETEREP(unsigned const*) (ClusterMgr.cpp:462)
by 0x9965C0: ClusterMgr::reportNodeFailed(unsigned short, bool) (ClusterMgr.cpp:547)
by 0x967A7B: TransporterRegistry::report_disconnect(unsigned short, int) (TransporterRegistry.cpp:1027)
by 0x997B89: TCP_Transporter::doReceive() (Transporter.hpp:162)
by 0x96A01A: TransporterRegistry::performReceive() (TransporterRegistry.cpp:809)
by 0x991A10: TransporterFacade::threadMainReceive() (TransporterFacade.cpp:513)
by 0x991A38: runReceiveResponse_C (TransporterFacade.cpp:485)
by 0x983059: ndb_thread_wrapper (NdbThread.c:81)
VALGRIND: '80 (32 direct, 48 indirect) bytes in 1 blocks are definitely lost in loss record 4 of 8'
COUNT: 2
FUNCTION: malloc FILES: master.err master1.err
TESTS: ndb_alter_table:ndb_binlog_discover
STACK: at 0x4A20859: malloc (vg_replace_malloc.c:149)
by 0x9346E9: EventBufData_list::move_gci_ops(EventBufData_list*, unsigned long long) (NdbEventOperationImpl.cpp:2655)
by 0x938911: EventBufData_list::append_list(EventBufData_list*, unsigned long long) (NdbEventOperationImpl.cpp:2579)
by 0x938BD3: NdbEventBuffer::execSUB_GCP_COMPLETE_REP(SubGcpCompleteRep const*) (NdbEventOperationImpl.cpp:1514)
by 0x93B6A4: NdbEventBuffer::completeClusterFailed() (NdbEventOperationImpl.cpp:1781)
by 0x91F2A8: Ndb::report_node_failure_completed(unsigned) (Ndbif.cpp:278)
by 0x91F37D: Ndb::statusMessage(void*, unsigned, bool, bool) (Ndbif.cpp:238)
by 0x992FB2: TransporterFacade::ReportNodeFailureComplete(unsigned short) (TransporterFacade.cpp:836)
by 0x994D32: ClusterMgr::execNF_COMPLETEREP(unsigned const*) (ClusterMgr.cpp:462)
by 0x9965C0: ClusterMgr::reportNodeFailed(unsigned short, bool) (ClusterMgr.cpp:547)
by 0x967A7B: TransporterRegistry::report_disconnect(unsigned short, int) (TransporterRegistry.cpp:1027)
by 0x997B89: TCP_Transporter::doReceive() (Transporter.hpp:162)
by 0x96A01A: TransporterRegistry::performReceive() (TransporterRegistry.cpp:809)
by 0x991A10: TransporterFacade::threadMainReceive() (TransporterFacade.cpp:513)
by 0x991A38: runReceiveResponse_C (TransporterFacade.cpp:485)
by 0x983059: ndb_thread_wrapper (NdbThread.c:81)
How to repeat:
valgrind in push build
Suggested fix:
# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
# 2007/01/31 08:23:19+07:00 tomas@poseidon.mysql.com
# (recommit from 5.1 main)
# valgrind leak
# - no injected events if operation is not connected
#
# storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
# 2007/01/31 08:23:11+07:00 tomas@poseidon.mysql.com +29 -27
# (recommit from 5.1 main)
# valgrind leak
# - no injected events if operation is not connected
#
diff -Nru a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
--- a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp 2007-02-01 08:13:49 +07:00
+++ b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp 2007-02-01 08:13:49 +07:00
@@ -1611,17 +1611,24 @@
Uint32 &oid_ref)
{
NdbEventOperationImpl *dropped_ev_op = m_dropped_ev_op;
+ DBUG_PRINT("info", ("gci: %u", data.gci));
do
{
do
{
- oid_ref = impl->m_oid;
- insertDataL(impl, &data, ptr);
+ if (impl->m_node_bit_mask.get(0u))
+ {
+ oid_ref = impl->m_oid;
+ insertDataL(impl, &data, ptr);
+ }
NdbEventOperationImpl* blob_op = impl->theBlobOpList;
while (blob_op != NULL)
{
- oid_ref = blob_op->m_oid;
- insertDataL(blob_op, &data, ptr);
+ if (blob_op->m_node_bit_mask.get(0u))
+ {
+ oid_ref = blob_op->m_oid;
+ insertDataL(blob_op, &data, ptr);
+ }
blob_op = blob_op->m_next;
}
} while((impl = impl->m_next));
@@ -1806,6 +1813,7 @@
switch (operation)
{
case NdbDictionary::Event::_TE_NODE_FAILURE:
+ DBUG_ASSERT(op->m_node_bit_mask.get(0u) != 0);
op->m_node_bit_mask.clear(SubTableData::getNdbdNodeId(ri));
DBUG_PRINT("info",
("_TE_NODE_FAILURE: m_ref_count: %u for op: %p id: %u",
@@ -1821,29 +1829,23 @@
DBUG_RETURN_EVENT(0);
break;
case NdbDictionary::Event::_TE_CLUSTER_FAILURE:
- if (op->m_node_bit_mask.get(0))
- {
- op->m_node_bit_mask.clear();
- DBUG_ASSERT(op->m_ref_count > 0);
- // remove kernel reference
- // added in execute_nolock
- op->m_ref_count--;
- DBUG_PRINT("info", ("_TE_CLUSTER_FAILURE: m_ref_count: %u for op: %p",
- op->m_ref_count, op));
- if (op->theMainOp)
- {
- DBUG_ASSERT(op->m_ref_count == 0);
- DBUG_ASSERT(op->theMainOp->m_ref_count > 0);
- // remove blob reference in main op
- // added in execute_no_lock
- op->theMainOp->m_ref_count--;
- DBUG_PRINT("info", ("m_ref_count: %u for op: %p",
- op->theMainOp->m_ref_count, op->theMainOp));
- }
- }
- else
- {
- DBUG_ASSERT(op->m_node_bit_mask.isclear() != 0);
+ DBUG_ASSERT(op->m_node_bit_mask.get(0u) != 0);
+ op->m_node_bit_mask.clear();
+ DBUG_ASSERT(op->m_ref_count > 0);
+ // remove kernel reference
+ // added in execute_nolock
+ op->m_ref_count--;
+ DBUG_PRINT("info", ("_TE_CLUSTER_FAILURE: m_ref_count: %u for op: %p",
+ op->m_ref_count, op));
+ if (op->theMainOp)
+ {
+ DBUG_ASSERT(op->m_ref_count == 0);
+ DBUG_ASSERT(op->theMainOp->m_ref_count > 0);
+ // remove blob reference in main op
+ // added in execute_no_lock
+ op->theMainOp->m_ref_count--;
+ DBUG_PRINT("info", ("m_ref_count: %u for op: %p",
+ op->theMainOp->m_ref_count, op->theMainOp));
}
break;
case NdbDictionary::Event::_TE_STOP: