ndb -

  fix ndb-violations of strict aliasing found by gcc4.1
  (crashes in ndb_dd_*)
parent 6d715dea
......@@ -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;
......
......@@ -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);
}
};
......
......@@ -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
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