summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dbug/CMakeLists.txt11
-rw-r--r--dbug/dbug.c13
2 files changed, 23 insertions, 1 deletions
diff --git a/dbug/CMakeLists.txt b/dbug/CMakeLists.txt
index a4f30f75f97..0a9af25dba1 100644
--- a/dbug/CMakeLists.txt
+++ b/dbug/CMakeLists.txt
@@ -17,6 +17,17 @@ INCLUDE_DIRECTORIES(
${CMAKE_SOURCE_DIR}/dbug
${CMAKE_SOURCE_DIR}/include
)
+IF(WIN32)
+ SET(DEFAULT_SAFEMALLOC OFF)
+ELSE()
+ SET(DEFAULT_SAFEMALLOC ON)
+ENDIF()
+OPTION(WITH_SAFEMALLOC ${DEFAULT_SAFEMALLOC} "Use safemalloc for debug builds. Will result in slower execution.")
+
+IF(WITH_SAFEMALLOC)
+ ADD_DEFINITIONS( -DSAFEMALLOC)
+ENDIF()
+
SET(DBUG_SOURCES dbug.c)
ADD_CONVENIENCE_LIBRARY(dbug ${DBUG_SOURCES})
TARGET_LINK_LIBRARIES(dbug mysys)
diff --git a/dbug/dbug.c b/dbug/dbug.c
index 3dce91cd2ca..299d3e0d5da 100644
--- a/dbug/dbug.c
+++ b/dbug/dbug.c
@@ -2253,6 +2253,9 @@ static void free_memory(void *ptr);
void *_db_malloc_(size_t size)
{
+#ifndef SAFEMALLOC
+ return malloc(size);
+#else
CODE_STATE *cs= code_state();
struct st_irem *irem;
uchar *data;
@@ -2318,10 +2321,14 @@ void *_db_malloc_(size_t size)
TRASH_ALLOC(data, size);
return data;
+#endif
}
void *_db_realloc_(void *ptr, size_t size)
{
+#ifndef SAFEMALLOC
+ return realloc(ptr, size);
+#else
char *data;
if (!ptr)
@@ -2338,15 +2345,19 @@ void *_db_realloc_(void *ptr, size_t size)
free_memory(ptr);
}
return data;
+#endif
}
void _db_free_(void *ptr)
{
+#ifndef SAFEMALLOC
+ free(ptr);
+#else
if (!ptr || bad_ptr("Freeing", ptr))
return;
free_memory(ptr);
- return;
+#endif
}
static void free_memory(void *ptr)