summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <jonas@perch.ndb.mysql.com>2006-09-03 11:11:37 +0200
committerunknown <jonas@perch.ndb.mysql.com>2006-09-03 11:11:37 +0200
commit8e1a9cd140cc9f0c4b053dd4e162e4d2f45245c5 (patch)
tree3ac7a77785ce08a950a5210116bfc9090b1330b6
parent3ba0b6e0f0ac6596f18a4cf2178546c72adf4ebc (diff)
downloadmariadb-git-8e1a9cd140cc9f0c4b053dd4e162e4d2f45245c5.tar.gz
ndb -
fix ndb-violations of strict aliasing found by gcc4.1 (crashes in ndb_dd_*) storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp: Fix strict-aliasing storage/ndb/src/kernel/vm/KeyTable2Ref.hpp: Fix strict-aliasing storage/ndb/src/kernel/vm/Pool.hpp: Fix strict-aliasing
-rw-r--r--storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp4
-rw-r--r--storage/ndb/src/kernel/vm/KeyTable2Ref.hpp22
-rw-r--r--storage/ndb/src/kernel/vm/Pool.hpp5
3 files changed, 24 insertions, 7 deletions
diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
index 02b0cb83847..45eed73455c 100644
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
@@ -7295,7 +7295,7 @@ void Dbdict::execGET_TABINFOREQ(Signal* signal)
if(objEntry->m_tableType==DictTabInfo::Datafile)
{
jam();
- GetTabInfoReq *req= (GetTabInfoReq*)signal->theData;
+ GetTabInfoReq *req= (GetTabInfoReq*)signal->getDataPtrSend();
req->senderData= c_retrieveRecord.retrievePage;
req->senderRef= reference();
req->requestType= GetTabInfoReq::RequestById;
@@ -7307,7 +7307,7 @@ void Dbdict::execGET_TABINFOREQ(Signal* signal)
else if(objEntry->m_tableType==DictTabInfo::LogfileGroup)
{
jam();
- GetTabInfoReq *req= (GetTabInfoReq*)signal->theData;
+ GetTabInfoReq *req= (GetTabInfoReq*)signal->getDataPtrSend();
req->senderData= c_retrieveRecord.retrievePage;
req->senderRef= reference();
req->requestType= GetTabInfoReq::RequestById;
diff --git a/storage/ndb/src/kernel/vm/KeyTable2Ref.hpp b/storage/ndb/src/kernel/vm/KeyTable2Ref.hpp
index 8ede144a53e..29950f1a8a6 100644
--- a/storage/ndb/src/kernel/vm/KeyTable2Ref.hpp
+++ b/storage/ndb/src/kernel/vm/KeyTable2Ref.hpp
@@ -32,19 +32,33 @@ public:
bool find(Ptr<T>& ptr, Uint32 key) const {
U rec;
rec.key = key;
- return m_ref.find(*(Ptr<U>*)&ptr, rec);
+ Ptr<U> tmp;
+ bool ret = m_ref.find(tmp, rec);
+ ptr.i = tmp.i;
+ ptr.p = static_cast<T*>(tmp.p);
+ return ret;
}
bool seize(Ptr<T> & ptr) {
- return m_ref.seize(*(Ptr<U>*)&ptr);
+ Ptr<U> tmp;
+ bool ret = m_ref.seize(tmp);
+ ptr.i = tmp.i;
+ ptr.p = static_cast<T*>(tmp.p);
+ return ret;
}
void add(Ptr<T> & ptr) {
- m_ref.add(*(Ptr<U>*)&ptr);
+ Ptr<U> tmp;
+ tmp.i = ptr.i;
+ tmp.p = static_cast<U*>(ptr.p);
+ m_ref.add(tmp);
}
void release(Ptr<T> & ptr) {
- m_ref.release(*(Ptr<U>*)&ptr);
+ Ptr<U> tmp;
+ tmp.i = ptr.i;
+ tmp.p = static_cast<U*>(ptr.p);
+ m_ref.release(tmp);
}
};
diff --git a/storage/ndb/src/kernel/vm/Pool.hpp b/storage/ndb/src/kernel/vm/Pool.hpp
index 9ac6ea2fb46..70fcdf8b56a 100644
--- a/storage/ndb/src/kernel/vm/Pool.hpp
+++ b/storage/ndb/src/kernel/vm/Pool.hpp
@@ -324,7 +324,10 @@ inline
void
RecordPool<T, P>::release(Ptr<T> ptr)
{
- m_pool.release(*(Ptr<void>*)&ptr);
+ Ptr<void> tmp;
+ tmp.i = ptr.i;
+ tmp.p = ptr.p;
+ m_pool.release(tmp);
}
#endif