add rtt memory management support

This commit is contained in:
geniusgogo 2013-11-15 18:10:08 +00:00 committed by geniusgogo
parent bb71850863
commit 993374d860
1 changed files with 20 additions and 3 deletions

View File

@ -75,10 +75,27 @@ static malloc_zone_t* _sqliteZone_;
#define SQLITE_MALLOCSIZE(x) \ #define SQLITE_MALLOCSIZE(x) \
(_sqliteZone_ ? _sqliteZone_->size(_sqliteZone_,x) : malloc_size(x)) (_sqliteZone_ ? _sqliteZone_->size(_sqliteZone_,x) : malloc_size(x))
#elif defined(SQLITE_OS_RTT)
/*
** Use standard C library malloc and free on non-Apple systems.
** Also used by rt-thread systems if SQLITE_WITHOUT_ZONEMALLOC is defined.
*/
#define SQLITE_MALLOC(x) rt_malloc(x)
#define SQLITE_FREE(x) rt_free(x)
#define SQLITE_REALLOC(x,y) rt_realloc((x),(y))
#if (!defined(SQLITE_WITHOUT_MSIZE)) \
&& (defined(HAVE_MALLOC_H) && defined(HAVE_MALLOC_USABLE_SIZE))
# error "not have malloc_usable_size()"
#endif
#ifdef HAVE_MALLOC_USABLE_SIZE
# undef SQLITE_MALLOCSIZE
#endif
#else /* if not __APPLE__ */ #else /* if not __APPLE__ */
/* /*
** Use standard C library malloc and free on non-Apple systems. ** Use standard C library malloc and free on non-Apple systems.
** Also used by Apple systems if SQLITE_WITHOUT_ZONEMALLOC is defined. ** Also used by Apple systems if SQLITE_WITHOUT_ZONEMALLOC is defined.
*/ */
#define SQLITE_MALLOC(x) malloc(x) #define SQLITE_MALLOC(x) malloc(x)
@ -229,13 +246,13 @@ static int sqlite3MemInit(void *NotUsed){
/* defer MT decisions to system malloc */ /* defer MT decisions to system malloc */
_sqliteZone_ = malloc_default_zone(); _sqliteZone_ = malloc_default_zone();
}else{ }else{
/* only 1 core, use our own zone to contention over global locks, /* only 1 core, use our own zone to contention over global locks,
** e.g. we have our own dedicated locks */ ** e.g. we have our own dedicated locks */
bool success; bool success;
malloc_zone_t* newzone = malloc_create_zone(4096, 0); malloc_zone_t* newzone = malloc_create_zone(4096, 0);
malloc_set_zone_name(newzone, "Sqlite_Heap"); malloc_set_zone_name(newzone, "Sqlite_Heap");
do{ do{
success = OSAtomicCompareAndSwapPtrBarrier(NULL, newzone, success = OSAtomicCompareAndSwapPtrBarrier(NULL, newzone,
(void * volatile *)&_sqliteZone_); (void * volatile *)&_sqliteZone_);
}while(!_sqliteZone_); }while(!_sqliteZone_);
if( !success ){ if( !success ){