Sophie

Sophie

distrib > Mandriva > 2008.0 > x86_64 > media > main-testing-src > by-pkgid > adf83d37405e61716c565e6e16f370ea > files > 24

mysql-5.0.45-7.3mdv2008.0.src.rpm

From: knielsenDate: October 23 2007 4:46pm
Subject: bk commit into 5.0 tree (knielsen:1.2487) BUG#31761

Below is the list of changes that have just been committed into a local
5.0 repository of knielsen. When knielsen does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-10-23 16:45:56+02:00, knielsen@ymer.(none) +5 -0
  BUG#31761: Code for cluster is not safe for strict-alias optimization in new gcc
  
  Fix problem with AttributeHeader::init() seen with gcc 4.2.1.
  
  Using the same object as both Uint32 and class AttributeHeader violates
  strict aliasing rule.

  ndb/include/kernel/AttributeHeader.hpp@stripped, 2007-10-23 16:45:52+02:00, knielsen@ymer.(none) +5 -5
    BUG#31761: Code for cluster is not safe for strict-alias optimization in new gcc
    
    Fix problem with AttributeHeader::init() seen with gcc 4.2.1.
    
    Using the same object as both Uint32 and class AttributeHeader violates
    strict aliasing rule.

  ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp@stripped, 2007-10-23 16:45:53+02:00, knielsen@ymer.(none) +3 -2
    BUG#31761: Code for cluster is not safe for strict-alias optimization in new gcc
    
    Fix problem with AttributeHeader::init() seen with gcc 4.2.1.
    
    Using the same object as both Uint32 and class AttributeHeader violates
    strict aliasing rule.

  ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp@stripped, 2007-10-23 16:45:53+02:00, knielsen@ymer.(none) +5 -6
    BUG#31761: Code for cluster is not safe for strict-alias optimization in new gcc
    
    Fix problem with AttributeHeader::init() seen with gcc 4.2.1.
    
    Using the same object as both Uint32 and class AttributeHeader violates
    strict aliasing rule.

  ndb/src/kernel/blocks/dbutil/DbUtil.cpp@stripped, 2007-10-23 16:45:53+02:00, knielsen@ymer.(none) +2 -3
    BUG#31761: Code for cluster is not safe for strict-alias optimization in new gcc
    
    Fix problem with AttributeHeader::init() seen with gcc 4.2.1.
    
    Using the same object as both Uint32 and class AttributeHeader violates
    strict aliasing rule.

  ndb/src/ndbapi/NdbOperationDefine.cpp@stripped, 2007-10-23 16:45:53+02:00, knielsen@ymer.(none) +6 -8
    BUG#31761: Code for cluster is not safe for strict-alias optimization in new gcc
    
    Fix problem with AttributeHeader::init() seen with gcc 4.2.1.
    
    Using the same object as both Uint32 and class AttributeHeader violates
    strict aliasing rule.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	knielsen
# Host:	ymer.(none)
# Root:	/loke/home/knielsen/devel/mysql-5.0-ndb

--- 1.8/ndb/include/kernel/AttributeHeader.hpp	2007-10-23 16:46:03 +02:00
+++ 1.9/ndb/include/kernel/AttributeHeader.hpp	2007-10-23 16:46:03 +02:00
@@ -41,8 +41,7 @@ public:
   STATIC_CONST( FRAGMENT_MEMORY= 0xFFF9 );
 
   /** Initialize AttributeHeader at location aHeaderPtr */
-  static AttributeHeader& init(void* aHeaderPtr, Uint32 anAttributeId, 
-			       Uint32 aDataSize);
+  static void init(Uint32* aHeaderPtr, Uint32 anAttributeId, Uint32 aDataSize);
 
   /** Returns size of AttributeHeader (usually one or two words) */
   Uint32 getHeaderSize() const; // In 32-bit words
@@ -100,10 +99,11 @@ public:
  */
 
 inline
-AttributeHeader& AttributeHeader::init(void* aHeaderPtr, Uint32 anAttributeId, 
-				       Uint32 aDataSize)
+void AttributeHeader::init(Uint32* aHeaderPtr, Uint32 anAttributeId, 
+                           Uint32 aDataSize)
 {
-  return * new (aHeaderPtr) AttributeHeader(anAttributeId, aDataSize);
+  AttributeHeader ah(anAttributeId, aDataSize);
+  *aHeaderPtr = ah.m_value;
 }
 
 inline

--- 1.25/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	2007-10-23 16:46:03 +02:00
+++ 1.26/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	2007-10-23 16:46:03 +02:00
@@ -1577,8 +1577,8 @@ int Dbtup::interpreterNextLab(Signal* si
 	  Uint32 TdataForUpdate[3];
 	  Uint32 Tlen;
 
-	  AttributeHeader& ah = AttributeHeader::init(&TdataForUpdate[0], 
-						      TattrId, TattrNoOfWords);
+	  AttributeHeader ah(TattrId, TattrNoOfWords);
+          TdataForUpdate[0] = ah.m_value;
 	  TdataForUpdate[1] = TregMemBuffer[theRegister + 2];
 	  TdataForUpdate[2] = TregMemBuffer[theRegister + 3];
 	  Tlen = TattrNoOfWords + 1;
@@ -1594,6 +1594,7 @@ int Dbtup::interpreterNextLab(Signal* si
 		// Write a NULL value into the attribute
 		/* --------------------------------------------------------- */
 		ah.setNULL();
+                TdataForUpdate[0] = ah.m_value;
 		Tlen = 1;
 	      }//if
 	      int TnoDataRW= updateAttributes(pagePtr,

--- 1.20/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp	2007-10-23 16:46:03 +02:00
+++ 1.21/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp	2007-10-23 16:46:03 +02:00
@@ -676,8 +676,6 @@ bool
 Dbtup::checkUpdateOfPrimaryKey(Uint32* updateBuffer, Tablerec* const regTabPtr)
 {
   Uint32 keyReadBuffer[MAX_KEY_SIZE_IN_WORDS];
-  Uint32 attributeHeader;
-  AttributeHeader* ahOut = (AttributeHeader*)&attributeHeader;
   AttributeHeader ahIn(*updateBuffer);
   Uint32 attributeId = ahIn.getAttributeId();
   Uint32 attrDescriptorIndex = regTabPtr->tabDescriptor + (attributeId << ZAD_LOG_SIZE);
@@ -700,16 +698,17 @@ Dbtup::checkUpdateOfPrimaryKey(Uint32* u
 
   ReadFunction f = regTabPtr->readFunctionArray[attributeId];
 
-  AttributeHeader::init(&attributeHeader, attributeId, 0);
+  AttributeHeader attributeHeader(attributeId, 0);
   tOutBufIndex = 0;
   tMaxRead = MAX_KEY_SIZE_IN_WORDS;
 
   bool tmp = tXfrmFlag;
   tXfrmFlag = true;
-  ndbrequire((this->*f)(&keyReadBuffer[0], ahOut, attrDescriptor, attributeOffset));
+  ndbrequire((this->*f)(&keyReadBuffer[0], &attributeHeader, attrDescriptor,
+                        attributeOffset));
   tXfrmFlag = tmp;
-  ndbrequire(tOutBufIndex == ahOut->getDataSize());
-  if (ahIn.getDataSize() != ahOut->getDataSize()) {
+  ndbrequire(tOutBufIndex == attributeHeader.getDataSize());
+  if (ahIn.getDataSize() != attributeHeader.getDataSize()) {
     ljam();
     return true;
   }//if

--- 1.13/ndb/src/kernel/blocks/dbutil/DbUtil.cpp	2007-10-23 16:46:03 +02:00
+++ 1.14/ndb/src/kernel/blocks/dbutil/DbUtil.cpp	2007-10-23 16:46:03 +02:00
@@ -1168,9 +1168,7 @@ DbUtil::prepareOperation(Signal* signal,
     /**************************************************************
      * Attribute found - store in mapping  (AttributeId, Position)
      **************************************************************/
-    AttributeHeader & attrMap = 
-      AttributeHeader::init(attrMappingIt.data, 
-			    attrDesc.AttributeId,    // 1. Store AttrId
+    AttributeHeader attrMap(attrDesc.AttributeId,    // 1. Store AttrId
 			    0);
     
     if (attrDesc.AttributeKeyFlag) {
@@ -1199,6 +1197,7 @@ DbUtil::prepareOperation(Signal* signal,
 	return;
       }
     }
+    *(attrMappingIt.data) = attrMap.m_value;
 #if 0
     ndbout << "BEFORE: attrLength: " << attrLength << endl;
 #endif

--- 1.24/ndb/src/ndbapi/NdbOperationDefine.cpp	2007-10-23 16:46:03 +02:00
+++ 1.25/ndb/src/ndbapi/NdbOperationDefine.cpp	2007-10-23 16:46:03 +02:00
@@ -392,9 +392,8 @@ NdbOperation::getValue_impl(const NdbCol
 	return NULL;
       }//if
     }//if
-    Uint32 ah;
-    AttributeHeader::init(&ah, tAttrInfo->m_attrId, 0);
-    if (insertATTRINFO(ah) != -1) {	
+    AttributeHeader ah(tAttrInfo->m_attrId, 0);
+    if (insertATTRINFO(ah.m_value) != -1) {	
       // Insert Attribute Id into ATTRINFO part. 
       
       /************************************************************************
@@ -525,12 +524,11 @@ NdbOperation::setValue( const NdbColumnI
   
   tAttrId = tAttrInfo->m_attrId;
   const char *aValue = aValuePassed; 
-  Uint32 ahValue;
   if (aValue == NULL) {
     if (tAttrInfo->m_nullable) {
-      AttributeHeader& ah = AttributeHeader::init(&ahValue, tAttrId, 0);
+      AttributeHeader ah(tAttrId, 0);
       ah.setNULL();
-      insertATTRINFO(ahValue);
+      insertATTRINFO(ah.m_value);
       // Insert Attribute Id with the value
       // NULL into ATTRINFO part. 
       DBUG_RETURN(0);
@@ -563,8 +561,8 @@ NdbOperation::setValue( const NdbColumnI
   }//if
   const Uint32 totalSizeInWords = (sizeInBytes + 3)/4; // Including bits in last word
   const Uint32 sizeInWords = sizeInBytes / 4;          // Excluding bits in last word
-  (void) AttributeHeader::init(&ahValue, tAttrId, totalSizeInWords);
-  insertATTRINFO( ahValue );
+  AttributeHeader ah(tAttrId, totalSizeInWords);
+  insertATTRINFO( ah.m_value );
 
   /***********************************************************************
    * Check if the pointer of the value passed is aligned on a 4 byte boundary.