valgrind leak

- no injected events if operation is not connected
- remove extra valgrind checks
parent 5f50de1a
...@@ -19,10 +19,6 @@ ...@@ -19,10 +19,6 @@
#ifdef WITH_NDBCLUSTER_STORAGE_ENGINE #ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
#include "ha_ndbcluster.h" #include "ha_ndbcluster.h"
#ifdef HAVE_purify
#include <valgrind/memcheck.h>
#endif
#ifdef HAVE_NDB_BINLOG #ifdef HAVE_NDB_BINLOG
#include "rpl_injector.h" #include "rpl_injector.h"
#include "rpl_filter.h" #include "rpl_filter.h"
...@@ -3492,9 +3488,6 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) ...@@ -3492,9 +3488,6 @@ pthread_handler_t ndb_binlog_thread_func(void *arg)
pthread_cond_signal(&injector_cond); pthread_cond_signal(&injector_cond);
restart: restart:
#ifdef HAVE_purify
VALGRIND_DO_LEAK_CHECK;
#endif
/* /*
Main NDB Injector loop Main NDB Injector loop
*/ */
...@@ -3587,9 +3580,6 @@ restart: ...@@ -3587,9 +3580,6 @@ restart:
} }
} }
} }
#ifdef HAVE_purify
VALGRIND_DO_LEAK_CHECK;
#endif
{ {
static char db[]= ""; static char db[]= "";
thd->db= db; thd->db= db;
...@@ -3956,9 +3946,6 @@ restart: ...@@ -3956,9 +3946,6 @@ restart:
goto restart; goto restart;
} }
err: err:
#ifdef HAVE_purify
VALGRIND_DO_LEAK_CHECK;
#endif
sql_print_information("Stopping Cluster Binlog"); sql_print_information("Stopping Cluster Binlog");
DBUG_PRINT("info",("Shutting down cluster binlog thread")); DBUG_PRINT("info",("Shutting down cluster binlog thread"));
thd->proc_info= "Shutting down"; thd->proc_info= "Shutting down";
......
...@@ -1611,17 +1611,24 @@ NdbEventBuffer::insert_event(NdbEventOperationImpl* impl, ...@@ -1611,17 +1611,24 @@ NdbEventBuffer::insert_event(NdbEventOperationImpl* impl,
Uint32 &oid_ref) Uint32 &oid_ref)
{ {
NdbEventOperationImpl *dropped_ev_op = m_dropped_ev_op; NdbEventOperationImpl *dropped_ev_op = m_dropped_ev_op;
DBUG_PRINT("info", ("gci: %u", data.gci));
do do
{ {
do do
{ {
oid_ref = impl->m_oid; if (impl->m_node_bit_mask.get(0u))
insertDataL(impl, &data, ptr); {
oid_ref = impl->m_oid;
insertDataL(impl, &data, ptr);
}
NdbEventOperationImpl* blob_op = impl->theBlobOpList; NdbEventOperationImpl* blob_op = impl->theBlobOpList;
while (blob_op != NULL) while (blob_op != NULL)
{ {
oid_ref = blob_op->m_oid; if (blob_op->m_node_bit_mask.get(0u))
insertDataL(blob_op, &data, ptr); {
oid_ref = blob_op->m_oid;
insertDataL(blob_op, &data, ptr);
}
blob_op = blob_op->m_next; blob_op = blob_op->m_next;
} }
} while((impl = impl->m_next)); } while((impl = impl->m_next));
...@@ -1806,6 +1813,7 @@ NdbEventBuffer::insertDataL(NdbEventOperationImpl *op, ...@@ -1806,6 +1813,7 @@ NdbEventBuffer::insertDataL(NdbEventOperationImpl *op,
switch (operation) switch (operation)
{ {
case NdbDictionary::Event::_TE_NODE_FAILURE: 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)); op->m_node_bit_mask.clear(SubTableData::getNdbdNodeId(ri));
DBUG_PRINT("info", DBUG_PRINT("info",
("_TE_NODE_FAILURE: m_ref_count: %u for op: %p id: %u", ("_TE_NODE_FAILURE: m_ref_count: %u for op: %p id: %u",
...@@ -1821,29 +1829,23 @@ NdbEventBuffer::insertDataL(NdbEventOperationImpl *op, ...@@ -1821,29 +1829,23 @@ NdbEventBuffer::insertDataL(NdbEventOperationImpl *op,
DBUG_RETURN_EVENT(0); DBUG_RETURN_EVENT(0);
break; break;
case NdbDictionary::Event::_TE_CLUSTER_FAILURE: case NdbDictionary::Event::_TE_CLUSTER_FAILURE:
if (op->m_node_bit_mask.get(0)) DBUG_ASSERT(op->m_node_bit_mask.get(0u) != 0);
{ op->m_node_bit_mask.clear();
op->m_node_bit_mask.clear(); DBUG_ASSERT(op->m_ref_count > 0);
DBUG_ASSERT(op->m_ref_count > 0); // remove kernel reference
// remove kernel reference // added in execute_nolock
// added in execute_nolock op->m_ref_count--;
op->m_ref_count--; DBUG_PRINT("info", ("_TE_CLUSTER_FAILURE: m_ref_count: %u for op: %p",
DBUG_PRINT("info", ("_TE_CLUSTER_FAILURE: m_ref_count: %u for op: %p", op->m_ref_count, op));
op->m_ref_count, op)); if (op->theMainOp)
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_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; break;
case NdbDictionary::Event::_TE_STOP: case NdbDictionary::Event::_TE_STOP:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment