From 993374d860beed9bea309dda235ae200dcc7945c Mon Sep 17 00:00:00 2001 From: geniusgogo Date: Fri, 15 Nov 2013 18:10:08 +0000 Subject: [PATCH] add rtt memory management support --- components/external/SQLite-3.8.1/src/mem1.c | 23 ++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/components/external/SQLite-3.8.1/src/mem1.c b/components/external/SQLite-3.8.1/src/mem1.c index 3578496f33..17bf6ef0df 100644 --- a/components/external/SQLite-3.8.1/src/mem1.c +++ b/components/external/SQLite-3.8.1/src/mem1.c @@ -75,10 +75,27 @@ static malloc_zone_t* _sqliteZone_; #define SQLITE_MALLOCSIZE(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__ */ /* -** 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. */ #define SQLITE_MALLOC(x) malloc(x) @@ -229,13 +246,13 @@ static int sqlite3MemInit(void *NotUsed){ /* defer MT decisions to system malloc */ _sqliteZone_ = malloc_default_zone(); }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 */ bool success; malloc_zone_t* newzone = malloc_create_zone(4096, 0); malloc_set_zone_name(newzone, "Sqlite_Heap"); do{ - success = OSAtomicCompareAndSwapPtrBarrier(NULL, newzone, + success = OSAtomicCompareAndSwapPtrBarrier(NULL, newzone, (void * volatile *)&_sqliteZone_); }while(!_sqliteZone_); if( !success ){