Despite of the following comment in mem1.c:
    <http://www.sqlite.org/src/artifact/437c7c4af9?ln=54-56>
on Windows the _msize() function is not used at all,
neither on MSVC neither on MinGW.

The problem is that at the end of the @ifdef'ery, when
HAVE_MALLOC_USABLE_SIZE is not defined,
SQLITE_MALLOCSIZE is undefined. That undoes
everything useful done earlier.

There are various ways to fix this, here is mine.
I hope this fix is in time for SQLite 3.8.2.

Regards,
         Jan Nijtmans
==================================================================
Index: src/mem1.c
==================================================================
--- src/mem1.c
+++ src/mem1.c
@@ -53,12 +53,14 @@
 /*
 ** The MSVCRT has malloc_usable_size() but it is called _msize().
 ** The use of _msize() is automatic, but can be disabled by compiling
 ** with -DSQLITE_WITHOUT_MSIZE
 */
-#if defined(_MSC_VER) && !defined(SQLITE_WITHOUT_MSIZE)
+#if defined(_WIN32) && !defined(SQLITE_WITHOUT_MSIZE)
 # define SQLITE_MALLOCSIZE _msize
+#elif defined(HAVE_MALLOC_H) && defined(HAVE_MALLOC_USABLE_SIZE)
+# define SQLITE_MALLOCSIZE malloc_usable_size
 #endif

 #if defined(__APPLE__) && !defined(SQLITE_WITHOUT_ZONEMALLOC)

 /*
@@ -83,21 +85,13 @@
 */
 #define SQLITE_MALLOC(x)    malloc(x)
 #define SQLITE_FREE(x)      free(x)
 #define SQLITE_REALLOC(x,y) realloc((x),(y))

-#if (defined(_MSC_VER) && !defined(SQLITE_WITHOUT_MSIZE)) \
-      || (defined(HAVE_MALLOC_H) && defined(HAVE_MALLOC_USABLE_SIZE))
+#if defined(SQLITE_MALLOCSIZE)
 # include <malloc.h>    /* Needed for malloc_usable_size on linux */
 #endif
-#ifdef HAVE_MALLOC_USABLE_SIZE
-# ifndef SQLITE_MALLOCSIZE
-#  define SQLITE_MALLOCSIZE(x) malloc_usable_size(x)
-# endif
-#else
-# undef SQLITE_MALLOCSIZE
-#endif

 #endif /* __APPLE__ or not __APPLE__ */

 /*
 ** Like malloc(), but remember the size of the allocation
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to