List:Commits« Previous MessageNext Message »
From:Jonas Oreland Date:November 4 2009 4:55pm
Subject:bzr commit into mysql-5.1-telco-6.3 branch (jonas:3155)
View as plain text  
#At file:///home/jonas/src/telco-6.3/ based on
revid:jonas@stripped

 3155 Jonas Oreland	2009-11-04
      ndb - add assertions to find bugs like 48531

    modified:
      storage/ndb/src/kernel/vm/SimulatedBlock.cpp
      storage/ndb/src/kernel/vm/SimulatedBlock.hpp
=== modified file 'storage/ndb/src/kernel/vm/SimulatedBlock.cpp'
--- a/storage/ndb/src/kernel/vm/SimulatedBlock.cpp	2009-10-20 19:19:19 +0000
+++ b/storage/ndb/src/kernel/vm/SimulatedBlock.cpp	2009-11-04 15:55:06 +0000
@@ -186,7 +186,7 @@ SimulatedBlock::signal_error(Uint32 gsn,
 
 extern class SectionSegmentPool g_sectionSegmentPool;
 
-#define check_sections(signal, cnt) if (unlikely(cnt))
handle_invalid_sections_in_send_signal(signal)
+#define check_sections(signal, cnt, cnt2) do { if (unlikely(cnt)) {
handle_invalid_sections_in_send_signal(signal); } else if (unlikely(cnt2 == 0 &&
signal->header.m_fragmentInfo != 0)) { handle_invalid_fragmentInfo(signal); } }
while(0)
 
 void
 SimulatedBlock::handle_invalid_sections_in_send_signal(Signal* signal) const
@@ -227,6 +227,18 @@ SimulatedBlock::handle_lingering_section
 #endif
 }
 
+void
+SimulatedBlock::handle_invalid_fragmentInfo(Signal* signal) const
+{
+#if defined VM_TRACE || defined ERROR_INSERT
+  ErrorReporter::handleError(NDBD_EXIT_BLOCK_BNR_ZERO,
+			     "Incorrect header->m_fragmentInfo in sendSignal()",
+			     "");
+#else
+  signal->header.m_fragmentInfo = 0;
+  infoEvent("Incorrect header->m_fragmentInfo in sendSignal");
+#endif
+}
 
 void 
 SimulatedBlock::sendSignal(BlockReference ref, 
@@ -248,7 +260,7 @@ SimulatedBlock::sendSignal(BlockReferenc
   signal->header.theReceiversBlockNumber = recBlock;
   signal->header.m_noOfSections = 0;
 
-  check_sections(signal, noOfSections);
+  check_sections(signal, noOfSections, 0);
   
   Uint32 tSignalId = signal->header.theSignalId;
   
@@ -325,7 +337,7 @@ SimulatedBlock::sendSignal(NodeReceiverG
   signal->header.theSendersBlockRef = reference();
   signal->header.m_noOfSections = 0;
 
-  check_sections(signal, noOfSections);
+  check_sections(signal, noOfSections, 0);
 
   if ((length == 0) || (length > 25) || (recBlock == 0)) {
     signal_error(gsn, length, recBlock, __FILE__, __LINE__);
@@ -411,7 +423,7 @@ SimulatedBlock::sendSignal(BlockReferenc
   Uint32 recNode   = refToNode(ref);
   Uint32 ourProcessor         = globalData.ownId;
   
-  check_sections(signal, signal->header.m_noOfSections);
+  check_sections(signal, signal->header.m_noOfSections, noOfSections);
   
   signal->header.theLength = length;
   signal->header.theVerId_signalNumber = gsn;
@@ -505,7 +517,7 @@ SimulatedBlock::sendSignal(NodeReceiverG
   Uint32 ourProcessor = globalData.ownId;
   Uint32 recBlock = rg.m_block;
   
-  check_sections(signal, signal->header.m_noOfSections);
+  check_sections(signal, signal->header.m_noOfSections, noOfSections);
   
   signal->header.theLength = length;
   signal->header.theVerId_signalNumber = gsn;
@@ -609,7 +621,7 @@ SimulatedBlock::sendSignal(BlockReferenc
   Uint32 recNode   = refToNode(ref);
   Uint32 ourProcessor         = globalData.ownId;
 
-  check_sections(signal, signal->header.m_noOfSections);
+  check_sections(signal, signal->header.m_noOfSections, noOfSections);
 
   signal->header.theLength = length;
   signal->header.theVerId_signalNumber = gsn;
@@ -701,7 +713,7 @@ SimulatedBlock::sendSignal(NodeReceiverG
   Uint32 ourProcessor = globalData.ownId;
   Uint32 recBlock = rg.m_block;
 
-  check_sections(signal, signal->header.m_noOfSections);
+  check_sections(signal, signal->header.m_noOfSections, noOfSections);
 
   signal->header.theLength = length;
   signal->header.theVerId_signalNumber = gsn;
@@ -807,7 +819,7 @@ SimulatedBlock::sendSignalWithDelay(Bloc
   
   BlockNumber bnr = refToBlock(ref);
 
-  check_sections(signal, signal->header.m_noOfSections);
+  check_sections(signal, signal->header.m_noOfSections, 0);
   
   signal->header.theLength = length;
   signal->header.theSendersSignalId = signal->header.theSignalId;
@@ -850,7 +862,7 @@ SimulatedBlock::sendSignalWithDelay(Bloc
     bnr_error();
   }//if
 
-  check_sections(signal, signal->header.m_noOfSections);
+  check_sections(signal, signal->header.m_noOfSections, noOfSections);
 
   signal->header.theLength = length;
   signal->header.theSendersSignalId = signal->header.theSignalId;
@@ -1999,7 +2011,7 @@ SimulatedBlock::sendFirstFragment(Fragme
 				  Uint32 noOfSections,
 				  Uint32 messageSize){
   
-  check_sections(signal, signal->header.m_noOfSections);
+  check_sections(signal, signal->header.m_noOfSections, noOfSections);
   
   info.m_sectionPtr[0].m_linear.p = NULL;
   info.m_sectionPtr[1].m_linear.p = NULL;

=== modified file 'storage/ndb/src/kernel/vm/SimulatedBlock.hpp'
--- a/storage/ndb/src/kernel/vm/SimulatedBlock.hpp	2009-10-20 19:19:19 +0000
+++ b/storage/ndb/src/kernel/vm/SimulatedBlock.hpp	2009-11-04 15:55:06 +0000
@@ -217,6 +217,7 @@ protected:
   void handle_invalid_sections_in_send_signal(Signal*) const;
   void handle_lingering_sections_after_execute(Signal*) const;
   void handle_lingering_sections_after_execute(SectionHandle*) const;
+  void handle_invalid_fragmentInfo(Signal*) const;
 
   /**
    * Send routed signals (ONLY LOCALLY)


Attachment: [text/bzr-bundle] bzr/jonas@mysql.com-20091104155506-eb2ht2wngaklydvb.bundle
Thread
bzr commit into mysql-5.1-telco-6.3 branch (jonas:3155)Jonas Oreland4 Nov 2009