From d0bd8a8a4194dfd5896cebcbc9ee49f936a8f8fe Mon Sep 17 00:00:00 2001 From: "jonas@perch.ndb.mysql.com" <> Date: Fri, 13 Oct 2006 10:11:18 +0200 Subject: ndb - fix memleak (due to incorrect merge of bug#21941) recommit into release-clone --- storage/ndb/src/ndbapi/NdbScanOperation.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'storage/ndb') diff --git a/storage/ndb/src/ndbapi/NdbScanOperation.cpp b/storage/ndb/src/ndbapi/NdbScanOperation.cpp index 4c39d4ee342..2d47f79ee09 100644 --- a/storage/ndb/src/ndbapi/NdbScanOperation.cpp +++ b/storage/ndb/src/ndbapi/NdbScanOperation.cpp @@ -701,7 +701,7 @@ void NdbScanOperation::close(bool forceSend, bool releaseOp) theNdbCon = NULL; m_transConnection = NULL; - if (tTransCon) + if (tTransCon && releaseOp) { NdbIndexScanOperation* tOp = (NdbIndexScanOperation*)this; @@ -716,7 +716,7 @@ void NdbScanOperation::close(bool forceSend, bool releaseOp) &tTransCon->m_theLastScanOperation, tOp); } - else if (releaseOp) + else { ret = tTransCon->releaseScanOperation(&tTransCon->m_firstExecutedScanOp, 0, tOp); -- cgit v1.2.1 From 6439d381a0589f2004f0520a5ff5e4a63b0686bd Mon Sep 17 00:00:00 2001 From: "jonas@perch.ndb.mysql.com" <> Date: Mon, 16 Oct 2006 23:37:00 +0200 Subject: ndb - fix some ndb strict-alias problems found with gcc 4.0.2 on Itanium2 (ndb_dd_* failures) --- .../ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp | 58 ++++++++++++++-------- storage/ndb/src/kernel/vm/Pool.hpp | 6 ++- 2 files changed, 42 insertions(+), 22 deletions(-) (limited to 'storage/ndb') diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp index 56f7fb1dd1e..a055b18888b 100644 --- a/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp +++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp @@ -75,7 +75,7 @@ Dbtup::dump_disk_alloc(Dbtup::Disk_alloc_info & alloc) for(Uint32 i = 0; i ptr; + PagePtr ptr; ArrayPool *pool= (ArrayPool*)&m_global_page_pool; LocalDLList list(*pool, alloc.m_dirty_pages[i]); for(list.first(ptr); !ptr.isNull(); list.next(ptr)) @@ -262,7 +262,7 @@ Dbtup::update_extent_pos(Disk_alloc_info& alloc, } void -Dbtup::restart_setup_page(Disk_alloc_info& alloc, Ptr pagePtr) +Dbtup::restart_setup_page(Disk_alloc_info& alloc, PagePtr pagePtr) { /** * Link to extent, clear uncommitted_used_space @@ -344,12 +344,15 @@ Dbtup::disk_page_prealloc(Signal* signal, if (!alloc.m_dirty_pages[i].isEmpty()) { ptrI= alloc.m_dirty_pages[i].firstItem; - Ptr page; - m_global_page_pool.getPtr(page, ptrI); + Ptr gpage; + m_global_page_pool.getPtr(gpage, ptrI); - disk_page_prealloc_dirty_page(alloc, *(PagePtr*)&page, i, sz); - key->m_page_no= ((Page*)page.p)->m_page_no; - key->m_file_no= ((Page*)page.p)->m_file_no; + PagePtr tmp; + tmp.i = gpage.i; + tmp.p = reinterpret_cast(gpage.p); + disk_page_prealloc_dirty_page(alloc, tmp, i, sz); + key->m_page_no= tmp.p->m_page_no; + key->m_file_no= tmp.p->m_file_no; if (DBG_DISK) ndbout << " found dirty page " << *key << endl; return 0; // Page in memory @@ -547,7 +550,7 @@ Dbtup::disk_page_prealloc(Signal* signal, void Dbtup::disk_page_prealloc_dirty_page(Disk_alloc_info & alloc, - Ptr pagePtr, + PagePtr pagePtr, Uint32 old_idx, Uint32 sz) { ddassert(pagePtr.p->list_index == old_idx); @@ -638,7 +641,9 @@ Dbtup::disk_page_prealloc_callback(Signal* signal, fragPtr.i= req.p->m_frag_ptr_i; ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); - Ptr pagePtr = *(Ptr*)&gpage; + PagePtr pagePtr; + pagePtr.i = gpage.i; + pagePtr.p = reinterpret_cast(gpage.p); if (unlikely(pagePtr.p->m_restart_seq != globalData.m_restart_seq)) { @@ -666,7 +671,9 @@ Dbtup::disk_page_prealloc_initial_callback(Signal*signal, Ptr gpage; m_global_page_pool.getPtr(gpage, page_id); - Ptr pagePtr = *(Ptr*)&gpage; + PagePtr pagePtr; + pagePtr.i = gpage.i; + pagePtr.p = reinterpret_cast(gpage.p); Ptr fragPtr; fragPtr.i= req.p->m_frag_ptr_i; @@ -705,7 +712,7 @@ void Dbtup::disk_page_prealloc_callback_common(Signal* signal, Ptr req, Ptr fragPtr, - Ptr pagePtr) + PagePtr pagePtr) { /** * 1) remove page request from Disk_alloc_info.m_page_requests @@ -736,7 +743,7 @@ Dbtup::disk_page_prealloc_callback_common(Signal* signal, */ ArrayPool *cheat_pool= (ArrayPool*)&m_global_page_pool; LocalDLList list(* cheat_pool, alloc.m_dirty_pages[new_idx]); - list.add(*(Ptr*)&pagePtr); + list.add(pagePtr); pagePtr.p->uncommitted_used_space = real_used; pagePtr.p->list_index = new_idx; @@ -765,7 +772,7 @@ Dbtup::disk_page_prealloc_callback_common(Signal* signal, } void -Dbtup::disk_page_set_dirty(Ptr pagePtr) +Dbtup::disk_page_set_dirty(PagePtr pagePtr) { Uint32 idx = pagePtr.p->list_index; if ((idx & 0x8000) == 0) @@ -833,7 +840,9 @@ Dbtup::disk_page_unmap_callback(Uint32 page_id, Uint32 dirty_count) { Ptr gpage; m_global_page_pool.getPtr(gpage, page_id); - PagePtr pagePtr= *(PagePtr*)&gpage; + PagePtr pagePtr; + pagePtr.i = gpage.i; + pagePtr.p = reinterpret_cast(gpage.p); Uint32 type = pagePtr.p->m_page_header.m_page_type; if (unlikely((type != File_formats::PT_Tup_fixsize_page && @@ -1028,10 +1037,13 @@ Dbtup::disk_page_abort_prealloc(Signal *signal, Fragrecord* fragPtrP, case -1: break; default: - Ptr page; - m_global_page_pool.getPtr(page, (Uint32)res); - disk_page_abort_prealloc_callback_1(signal, fragPtrP, *(PagePtr*)&page, - sz); + Ptr gpage; + m_global_page_pool.getPtr(gpage, (Uint32)res); + PagePtr pagePtr; + pagePtr.i = gpage.i; + pagePtr.p = reinterpret_cast(gpage.p); + + disk_page_abort_prealloc_callback_1(signal, fragPtrP, pagePtr, sz); } } @@ -1044,8 +1056,10 @@ Dbtup::disk_page_abort_prealloc_callback(Signal* signal, Ptr gpage; m_global_page_pool.getPtr(gpage, page_id); - PagePtr pagePtr= *(PagePtr*)&gpage; - + PagePtr pagePtr; + pagePtr.i = gpage.i; + pagePtr.p = reinterpret_cast(gpage.p); + Ptr tabPtr; tabPtr.i= pagePtr.p->m_table_id; ptrCheckGuard(tabPtr, cnoOfTablerec, tablerec); @@ -1308,7 +1322,9 @@ Dbtup::disk_restart_undo_callback(Signal* signal, jamEntry(); Ptr gpage; m_global_page_pool.getPtr(gpage, page_id); - Ptr pagePtr = *(Ptr*)&gpage; + PagePtr pagePtr; + pagePtr.i = gpage.i; + pagePtr.p = reinterpret_cast(gpage.p); Apply_undo* undo = &f_undo; diff --git a/storage/ndb/src/kernel/vm/Pool.hpp b/storage/ndb/src/kernel/vm/Pool.hpp index 70fcdf8b56a..fe3a50e127b 100644 --- a/storage/ndb/src/kernel/vm/Pool.hpp +++ b/storage/ndb/src/kernel/vm/Pool.hpp @@ -305,7 +305,11 @@ inline bool RecordPool::seize(Ptr & ptr) { - return m_pool.seize(*(Ptr*)&ptr); + Ptr tmp; + bool ret = m_pool.seize(tmp); + ptr.i = tmp.i; + ptr.p = static_cast(tmp.p); + return ret; } template -- cgit v1.2.1 From 5bce99a90b15940675f35d716b120d744c53c8e9 Mon Sep 17 00:00:00 2001 From: "jonas@perch.ndb.mysql.com" <> Date: Wed, 18 Oct 2006 10:07:02 +0200 Subject: ndb - Fix uninit variable, causing problems with auto-increment on rhas3-x86 (only found on this platform, really weird) --- storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'storage/ndb') diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp index 3118164badd..d9710cc2549 100644 --- a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp +++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp @@ -1039,22 +1039,19 @@ int Dbtup::handleUpdateReq(Signal* signal, tup_version= (tup_version + 1) & ZTUP_VERSION_MASK; operPtrP->tupVersion= tup_version; - int retValue; if (!req_struct->interpreted_exec) { jam(); - retValue= updateAttributes(req_struct, - &cinBuffer[0], - req_struct->attrinfo_len); + int retValue = updateAttributes(req_struct, + &cinBuffer[0], + req_struct->attrinfo_len); + if (unlikely(retValue == -1)) + goto error; } else { jam(); if (unlikely(interpreterStartLab(signal, req_struct) == -1)) return -1; } - if (retValue == -1) { - goto error; - } - if (regTabPtr->need_shrink()) { shrink_tuple(req_struct, sizes+2, regTabPtr, disk); @@ -1073,7 +1070,7 @@ int Dbtup::handleUpdateReq(Signal* signal, jam(); setChecksum(req_struct->m_tuple_ptr, regTabPtr); } - return retValue; + return 0; error: tupkeyErrorLab(signal); -- cgit v1.2.1 From cfd146d9117f055e0dd70a820bc82017c1fc01e3 Mon Sep 17 00:00:00 2001 From: "jonas@perch.ndb.mysql.com" <> Date: Mon, 23 Oct 2006 09:48:36 +0200 Subject: 5.1.12 - release clone ndb - revert fix bug#21052 as it's wrong, and induces bus-error on node crashes --- storage/ndb/src/mgmsrv/Services.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'storage/ndb') diff --git a/storage/ndb/src/mgmsrv/Services.cpp b/storage/ndb/src/mgmsrv/Services.cpp index 4a84095aa9f..80dd040eb1b 100644 --- a/storage/ndb/src/mgmsrv/Services.cpp +++ b/storage/ndb/src/mgmsrv/Services.cpp @@ -1368,14 +1368,8 @@ Ndb_mgmd_event_service::log(int eventType, const Uint32* theData, NodeId nodeId) if (ndb_logevent_body[i].index_fn) val= (*(ndb_logevent_body[i].index_fn))(val); str.appfmt("%s=%d\n",ndb_logevent_body[i].token, val); - if(strcmp(ndb_logevent_body[i].token,"error") == 0) - { - int m_text_len= strlen(m_text); - snprintf(m_text+m_text_len, 4 , " - "); - ndb_error_string(theData[3], m_text+(m_text_len+3), sizeof(m_text)-m_text_len-3); - } } - + Vector copy; m_clients.lock(); for(i = m_clients.size() - 1; i >= 0; i--) -- cgit v1.2.1