Essentially, the problem is that safemalloc is excruciatingly
slow as it checks all allocated blocks for overrun at each
memory management primitive, yielding a almost exponential
slowdown for the memory management functions (malloc, realloc,
free). The overrun check basically consists of verifying some
bytes of a block for certain magic keys, which catches some
simple forms of overrun. Another minor problem is violation
of aliasing rules and that its own internal list of blocks
is prone to corruption.
Another issue with safemalloc is rather the maintenance cost
as the tool has a significant impact on the server code.
Given the magnitude of memory debuggers available nowadays,
especially those that are provided with the platform malloc
implementation, maintenance of a in-house and largely obsolete
memory debugger becomes a burden that is not worth the effort
due to its slowness and lack of support for detecting more
common forms of heap corruption.
Since there are third-party tools that can provide the same
functionality at a lower or comparable performance cost, the
solution is to simply remove safemalloc. Third-party tools
can provide the same functionality at a lower or comparable
performance cost.
The removal of safemalloc also allows a simplification of the
malloc wrappers, removing quite a bit of kludge: redefinition
of my_malloc, my_free and the removal of the unused second
argument of my_free. Since free() always check whether the
supplied pointer is null, redudant checks are also removed.
Also, this patch adds unit testing for my_malloc and moves
my_realloc implementation into the same file as the other
memory allocation primitives.
client/mysqldump.c:
Pass my_free directly as its signature is compatible with the
callback type -- which wasn't the case for free_table_ent.
(make relies GNU extentions). The patch was partially
backport from 6.0.
Original comment:
bug#30708: make relies GNU extensions. Now that we no longer use
BitKeeper we can safely remove the SCCS handling with no loss of
functionality.
testcases
storage/ndb/src/kernel/blocks/ERROR_codes.txt:
new error codes
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
new error codes
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
new error codes
storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp:
remove assert
storage/ndb/test/ndbapi/testNodeRestart.cpp:
new testcase
1) -n Bug34216
Which tests node diying during multip-op commit
Very controlled
2) -n mixedmultiop
Runs several threads "load" of same scenario...not very controlled
storage/ndb/test/run-test/daily-basic-tests.txt:
new testcases
into sama.ndb.mysql.com:/export/space/pekka/ndb/version/my51-ndb
storage/ndb/src/ndbapi/Ndb.cpp:
Auto merged
storage/ndb/test/ndbapi/testOIBasic.cpp:
Auto merged
Updated with new support function from Magnus push to dbutil
storage/ndb/test/ndbapi/acrt/NdbRepStress.cpp:
Updated with new support function from Magnus push to dbutil
into sama.ndb.mysql.com:/export/space/pekka/ndb/version/my51-bug34107
storage/ndb/test/ndbapi/testInterpreter.cpp:
Auto merged
storage/ndb/test/run-test/daily-basic-tests.txt:
ul, fix next
into sama.ndb.mysql.com:/export/space/pekka/ndb/version/my51-bug31477
storage/ndb/include/ndbapi/Ndb.hpp:
Auto merged
storage/ndb/src/common/util/NdbOut.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp:
Auto merged
storage/ndb/test/ndbapi/testOIBasic.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp:
mindless merge
storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp:
mindless merge
into perch.ndb.mysql.com:/home/jonas/src/51-telco-gca
storage/ndb/include/util/Bitmask.hpp:
Auto merged
storage/ndb/src/common/util/Bitmask.cpp:
merge
storage/ndb/test/ndbapi/testBitfield.cpp:
merge
storage/ndb/test/include/DbUtil.hpp:
Add support for SqlResultSet
storage/ndb/test/ndbapi/Makefile.am:
Add testNDBT
storage/ndb/test/src/DbUtil.cpp:
Add support for SqlResultSet
storage/ndb/test/src/Makefile.am:
Build AtrtClient
storage/ndb/test/include/AtrtClient.hpp:
New BitKeeper file ``storage/ndb/test/include/AtrtClient.hpp''
storage/ndb/test/ndbapi/testNDBT.cpp:
New BitKeeper file ``storage/ndb/test/ndbapi/testNDBT.cpp''
storage/ndb/test/src/AtrtClient.cpp:
New BitKeeper file ``storage/ndb/test/src/AtrtClient.cpp''
into perch.ndb.mysql.com:/home/jonas/src/51-ndb
storage/ndb/src/kernel/blocks/ERROR_codes.txt:
Auto merged
storage/ndb/src/kernel/blocks/suma/Suma.cpp:
Auto merged
storage/ndb/test/run-test/daily-basic-tests.txt:
merge
dont assume that page is "all empty"
only as gci is acked, as release_gci might not have processed it yet
storage/ndb/src/kernel/blocks/ERROR_codes.txt:
new error codes
storage/ndb/src/kernel/blocks/suma/Suma.cpp:
dont assume that page is "all empty"
only as gci is acked, as release_gci might not have processed it yet
storage/ndb/test/ndbapi/test_event.cpp:
testcase
storage/ndb/test/run-test/daily-basic-tests.txt:
testcase
into dev3-221.dev.cn.tlan:/home/ngb/mysql/mysql-5.1/mysql-5.1-new-ndb-bj
storage/ndb/src/kernel/blocks/backup/Backup.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
Auto merged
storage/ndb/src/kernel/blocks/lgman.cpp:
Auto merged
storage/ndb/src/kernel/blocks/tsman.cpp:
Auto merged
storage/ndb/test/ndbapi/testDict.cpp:
Auto merged
storage/ndb/src/kernel/blocks/ERROR_codes.txt:
SCCS merged
storage/ndb/src/ndbapi/ndberror.c:
SCCS merged
More code improvments
storage/ndb/test/include/DbUtil.hpp:
More code improvments
storage/ndb/test/src/DbUtil.cpp:
More code improvments
storage/ndb/test/ndbapi/acrt/NdbRepStress.cpp:
More code improvments
Updated with suggestions from Magnus and other fixes and adjustments I found along the way
DbUtil.hpp, DbUtil.cpp:
fixes and adjustments I found along the way
storage/ndb/test/ndbapi/acrt/NdbRepStress.cpp:
Updated with suggestions from Magnus and other fixes and adjustments I found along the way
storage/ndb/test/src/DbUtil.cpp:
fixes and adjustments I found along the way
storage/ndb/test/include/DbUtil.hpp:
fixes and adjustments I found along the way
make local INCL_NODEREQ/CONF more robust (to remove testprg introduced race, error insert causes 5s delay)
storage/ndb/src/kernel/blocks/backup/Backup.cpp:
make local INCL_NODEREQ/CONF more robust (to remove testprg introduced race)
storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp:
make local INCL_NODEREQ/CONF more robust (to remove testprg introduced race)
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
make local INCL_NODEREQ/CONF more robust (to remove testprg introduced race)
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
make local INCL_NODEREQ/CONF more robust (to remove testprg introduced race)
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
make local INCL_NODEREQ/CONF more robust (to remove testprg introduced race)
storage/ndb/src/kernel/blocks/suma/Suma.cpp:
make local INCL_NODEREQ/CONF more robust (to remove testprg introduced race)
storage/ndb/test/ndbapi/testNodeRestart.cpp:
soem more printout
Fix handling of multiple redo phases
- set correct state
- handle 4 phases, by moving START_FRAGCONF to end of phase instead of beginning...
storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp:
remove unused state ACTIVE_REMOVE_AFTER
remove unused variable nextLcp
remove unused methods (BUILD_INDX)
add counter of outstanding GSN_EXEC_FRAGREQ
remove c_redo_complete_fragments cause it fits badly with functional multi-redo-phases
storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp:
remove unused stuff
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
1) set correct state before starting next non-empty REDO phase
2) move GSN_START_FRAGCONF to execFRAGCONF instead of when sending GSN_EXEC_FRAGREQ
or fragments with 4 redo-phases would never be complete...
storage/ndb/test/ndbapi/testSystemRestart.cpp:
testcase
storage/ndb/test/run-test/daily-basic-tests.txt:
testcase
1: Create a log file which is larger than 4G in 32-bit host.
2: Create a data file (tablespace) which is larger than 4G in 32-bit host.
storage/ndb/include/kernel/signaldata/CreateFilegroupImpl.hpp:
Add error code for log file too large
storage/ndb/src/kernel/blocks/ERROR_codes.txt:
Add error insert code in lgman and tsman
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
Add error code definination of lgman and tsman
storage/ndb/src/kernel/blocks/lgman.cpp:
Return REF when log file more than 4G in 32-bits host
storage/ndb/src/kernel/blocks/tsman.cpp:
return FER when data file larger than 4G in 32-bits host
storage/ndb/src/ndbapi/ndberror.c:
Add describe of new errorCode
storage/ndb/test/ndbapi/testDict.cpp:
Add test case for bug29186
Updated DropDDObjects in testDict to ignore the user tables created in the MySQL database
storage/ndb/test/ndbapi/testDict.cpp:
Updated DropDDObjects in testDict to ignore the user tables created in the MySQL database
into perch.ndb.mysql.com:/home/jonas/src/51-ndb
storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp:
Auto merged
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
Auto merged
storage/ndb/src/kernel/blocks/ERROR_codes.txt:
merge
storage/ndb/test/ndbapi/testNodeRestart.cpp:
merge
storage/ndb/test/run-test/daily-basic-tests.txt:
merge
partial backport from 6.2 + add fix of bug
storage/ndb/include/kernel/GlobalSignalNumbers.h:
add prep_copy_frag
storage/ndb/include/kernel/signaldata/AccScan.hpp:
add new argument specifying which page to scan to
storage/ndb/include/kernel/signaldata/CopyFrag.hpp:
add new argument specifying which page to scan to
storage/ndb/include/ndb_version.h.in:
add versioning checks for prep_copy_frag
storage/ndb/src/common/debugger/signaldata/SignalNames.cpp:
add prep_copy_frag
storage/ndb/src/kernel/blocks/ERROR_codes.txt:
new error codes
storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp:
add new to-step
storage/ndb/src/kernel/blocks/dbdih/DbdihInit.cpp:
add new to-step
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
add new to-step
storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp:
add new to-step
storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp:
add new to-step
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
add new to-step
storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp:
add new argument specifying which page to scan to
storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp:
add utility to get max page used by fragment
storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp:
add NR scan to > frag.noOfPages
storage/ndb/test/ndbapi/testSystemRestart.cpp:
add testcase
storage/ndb/test/run-test/daily-basic-tests.txt:
add testcase
storage/ndb/test/src/NdbRestarts.cpp:
add testcase
into perch.ndb.mysql.com:/home/jonas/src/51-ndb
storage/ndb/src/kernel/blocks/ERROR_codes.txt:
Auto merged
storage/ndb/src/kernel/blocks/suma/Suma.cpp:
Auto merged
storage/ndb/test/run-test/daily-basic-tests.txt:
merge
Correct check for buffer/no buffer
storage/ndb/src/kernel/blocks/ERROR_codes.txt:
new error code
storage/ndb/src/kernel/blocks/suma/Suma.cpp:
correct check for buffer/no buffer
storage/ndb/test/ndbapi/test_event.cpp:
test prg
storage/ndb/test/run-test/daily-basic-tests.txt:
test prg
(re)impl. simple-read (read that releases lock just before LQHKEYCONF)
use simple-read for blobs
storage/ndb/include/kernel/signaldata/TcKeyConf.hpp:
rename bit
storage/ndb/include/ndbapi/NdbOperation.hpp:
add new lock-mode
storage/ndb/src/common/debugger/signaldata/TcKeyConf.cpp:
rename bit
storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp:
remove aggregate
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
impl. simple-read = normal read + release lock just before LQHKEYCONF
storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp:
impl. simple-read = normal read + release lock just before LQHKEYCONF
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
impl. simple-read = normal read + release lock just before LQHKEYCONF
storage/ndb/src/ndbapi/NdbBlob.cpp:
use simple read for blobs
storage/ndb/src/ndbapi/NdbIndexOperation.cpp:
no simple-read for ui (yet)
storage/ndb/src/ndbapi/NdbOperationDefine.cpp:
impl. simple-read
storage/ndb/src/ndbapi/NdbOperationExec.cpp:
impl. simple-read
storage/ndb/src/ndbapi/NdbReceiver.cpp:
impl. simple-read
storage/ndb/src/ndbapi/NdbScanOperation.cpp:
no simple-read for scan (yet)
storage/ndb/src/ndbapi/NdbTransaction.cpp:
rename bit
storage/ndb/test/ndbapi/testBasic.cpp:
add testcase for simlpe-read
storage/ndb/test/run-test/daily-basic-tests.txt:
add testcase
storage/ndb/test/src/HugoOperations.cpp:
add simple-read
into perch.ndb.mysql.com:/home/jonas/src/51-ndb
storage/ndb/src/kernel/blocks/ERROR_codes.txt:
Auto merged
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
Auto merged
storage/ndb/test/ndbapi/testNodeRestart.cpp:
Auto merged
storage/ndb/test/run-test/daily-basic-tests.txt:
merge
Fix bug regarding node that missed 2 LCP's (that was not included in next LCP after SR)
storage/ndb/src/kernel/blocks/ERROR_codes.txt:
add new error codes for bug#31525
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
add new error codes for bug#31525
fix bug, i.e include missing_2 in LCP
storage/ndb/test/ndbapi/testNodeRestart.cpp:
add testcase for bug#31525
storage/ndb/test/run-test/daily-basic-tests.txt:
add testcase for bug#31525
(autotest tests)
storage/ndb/test/ndbapi/testDict.cpp:
more test prg fixes
storage/ndb/test/ndbapi/testIndex.cpp:
more test prg fixes
storage/ndb/test/ndbapi/test_event.cpp:
more test prg fixes
into perch.ndb.mysql.com:/home/jonas/src/51-ndb
storage/ndb/src/cw/cpcd/APIService.cpp:
Auto merged
storage/ndb/test/ndbapi/testSystemRestart.cpp:
merge
storage/ndb/test/run-test/daily-basic-tests.txt:
merge