Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/guardedalloc/intern')
-rw-r--r--intern/guardedalloc/intern/mallocn.c7
-rw-r--r--intern/guardedalloc/intern/mallocn_guarded_impl.c15
-rw-r--r--intern/guardedalloc/intern/mallocn_intern.h16
-rw-r--r--intern/guardedalloc/intern/mallocn_lockfree_impl.c18
4 files changed, 35 insertions, 21 deletions
diff --git a/intern/guardedalloc/intern/mallocn.c b/intern/guardedalloc/intern/mallocn.c
index be0a8aadf84..1fd85a0c9f5 100644
--- a/intern/guardedalloc/intern/mallocn.c
+++ b/intern/guardedalloc/intern/mallocn.c
@@ -17,6 +17,7 @@
*
* Contributor(s): Brecht Van Lommel
* Campbell Barton
+ * Sergey Sharybin
*
* ***** END GPL LICENSE BLOCK *****
*/
@@ -53,11 +54,11 @@ void (*MEM_set_error_callback)(void (*func)(const char *)) = MEM_lockfree_set_er
bool (*MEM_check_memory_integrity)(void) = MEM_lockfree_check_memory_integrity;
void (*MEM_set_lock_callback)(void (*lock)(void), void (*unlock)(void)) = MEM_lockfree_set_lock_callback;
void (*MEM_set_memory_debug)(void) = MEM_lockfree_set_memory_debug;
-uintptr_t (*MEM_get_memory_in_use)(void) = MEM_lockfree_get_memory_in_use;
-uintptr_t (*MEM_get_mapped_memory_in_use)(void) = MEM_lockfree_get_mapped_memory_in_use;
+size_t (*MEM_get_memory_in_use)(void) = MEM_lockfree_get_memory_in_use;
+size_t (*MEM_get_mapped_memory_in_use)(void) = MEM_lockfree_get_mapped_memory_in_use;
unsigned int (*MEM_get_memory_blocks_in_use)(void) = MEM_lockfree_get_memory_blocks_in_use;
void (*MEM_reset_peak_memory)(void) = MEM_lockfree_reset_peak_memory;
-uintptr_t (*MEM_get_peak_memory)(void) = MEM_lockfree_get_peak_memory;
+size_t (*MEM_get_peak_memory)(void) = MEM_lockfree_get_peak_memory;
#ifndef NDEBUG
const char *(*MEM_name_ptr)(void *vmemh) = MEM_lockfree_name_ptr;
diff --git a/intern/guardedalloc/intern/mallocn_guarded_impl.c b/intern/guardedalloc/intern/mallocn_guarded_impl.c
index 10781a9cc54..1933e9d3ee3 100644
--- a/intern/guardedalloc/intern/mallocn_guarded_impl.c
+++ b/intern/guardedalloc/intern/mallocn_guarded_impl.c
@@ -22,6 +22,7 @@
*
* Contributor(s): Brecht Van Lommel
* Campbell Barton
+ * Sergey Sharybin
*
* ***** END GPL LICENSE BLOCK *****
*/
@@ -710,10 +711,12 @@ void MEM_guarded_printmemlist_stats(void)
totpb++;
pb++;
- if (!membl->mmap) {
+#ifdef USE_MALLOC_USABLE_SIZE
+ if (!membl->mmap && membl->alignment == 0) {
mem_in_use_slop += (sizeof(MemHead) + sizeof(MemTail) +
malloc_usable_size((void *)membl)) - membl->len;
}
+#endif
if (membl->next)
membl = MEMNEXT(membl->next);
@@ -1147,13 +1150,13 @@ size_t MEM_guarded_get_peak_memory(void)
void MEM_guarded_reset_peak_memory(void)
{
mem_lock_thread();
- peak_mem = 0;
+ peak_mem = mem_in_use;
mem_unlock_thread();
}
-uintptr_t MEM_guarded_get_memory_in_use(void)
+size_t MEM_guarded_get_memory_in_use(void)
{
- uintptr_t _mem_in_use;
+ size_t _mem_in_use;
mem_lock_thread();
_mem_in_use = mem_in_use;
@@ -1162,9 +1165,9 @@ uintptr_t MEM_guarded_get_memory_in_use(void)
return _mem_in_use;
}
-uintptr_t MEM_guarded_get_mapped_memory_in_use(void)
+size_t MEM_guarded_get_mapped_memory_in_use(void)
{
- uintptr_t _mmap_in_use;
+ size_t _mmap_in_use;
mem_lock_thread();
_mmap_in_use = mmap_in_use;
diff --git a/intern/guardedalloc/intern/mallocn_intern.h b/intern/guardedalloc/intern/mallocn_intern.h
index 7da74f7cc4c..3f7e462c1c7 100644
--- a/intern/guardedalloc/intern/mallocn_intern.h
+++ b/intern/guardedalloc/intern/mallocn_intern.h
@@ -50,6 +50,7 @@
#endif
#undef HAVE_MALLOC_STATS
+#define USE_MALLOC_USABLE_SIZE /* internal, when we have malloc_usable_size() */
#if defined(__linux__) || (defined(__FreeBSD_kernel__) && !defined(__FreeBSD__)) || defined(__GLIBC__)
# include <malloc.h>
@@ -63,7 +64,8 @@
# include <malloc.h>
# define malloc_usable_size _msize
#else
-# error "We don't know how to use malloc_usable_size on your platform"
+# pragma message "We don't know how to use malloc_usable_size on your platform"
+# undef USE_MALLOC_USABLE_SIZE
#endif
/* Blame Microsoft for LLP64 and no inttypes.h, quick workaround needed: */
@@ -139,11 +141,11 @@ void MEM_lockfree_set_error_callback(void (*func)(const char *));
bool MEM_lockfree_check_memory_integrity(void);
void MEM_lockfree_set_lock_callback(void (*lock)(void), void (*unlock)(void));
void MEM_lockfree_set_memory_debug(void);
-uintptr_t MEM_lockfree_get_memory_in_use(void);
-uintptr_t MEM_lockfree_get_mapped_memory_in_use(void);
+size_t MEM_lockfree_get_memory_in_use(void);
+size_t MEM_lockfree_get_mapped_memory_in_use(void);
unsigned int MEM_lockfree_get_memory_blocks_in_use(void);
void MEM_lockfree_reset_peak_memory(void);
-uintptr_t MEM_lockfree_get_peak_memory(void) ATTR_WARN_UNUSED_RESULT;
+size_t MEM_lockfree_get_peak_memory(void) ATTR_WARN_UNUSED_RESULT;
#ifndef NDEBUG
const char *MEM_lockfree_name_ptr(void *vmemh);
#endif
@@ -166,11 +168,11 @@ void MEM_guarded_set_error_callback(void (*func)(const char *));
bool MEM_guarded_check_memory_integrity(void);
void MEM_guarded_set_lock_callback(void (*lock)(void), void (*unlock)(void));
void MEM_guarded_set_memory_debug(void);
-uintptr_t MEM_guarded_get_memory_in_use(void);
-uintptr_t MEM_guarded_get_mapped_memory_in_use(void);
+size_t MEM_guarded_get_memory_in_use(void);
+size_t MEM_guarded_get_mapped_memory_in_use(void);
unsigned int MEM_guarded_get_memory_blocks_in_use(void);
void MEM_guarded_reset_peak_memory(void);
-uintptr_t MEM_guarded_get_peak_memory(void) ATTR_WARN_UNUSED_RESULT;
+size_t MEM_guarded_get_peak_memory(void) ATTR_WARN_UNUSED_RESULT;
#ifndef NDEBUG
const char *MEM_guarded_name_ptr(void *vmemh);
#endif
diff --git a/intern/guardedalloc/intern/mallocn_lockfree_impl.c b/intern/guardedalloc/intern/mallocn_lockfree_impl.c
index c0f6aeeaa9d..a80d67c3e80 100644
--- a/intern/guardedalloc/intern/mallocn_lockfree_impl.c
+++ b/intern/guardedalloc/intern/mallocn_lockfree_impl.c
@@ -71,7 +71,7 @@ enum {
#define MEMHEAD_IS_ALIGNED(memhead) ((memhead)->len & (size_t) MEMHEAD_ALIGN_FLAG)
/* Uncomment this to have proper peak counter. */
-//#define USE_ATOMIC_MAX
+#define USE_ATOMIC_MAX
MEM_INLINE void update_maximum(size_t *maximum_value, size_t value)
{
@@ -134,6 +134,14 @@ void MEM_lockfree_freeN(void *vmemh)
MemHead *memh = MEMHEAD_FROM_PTR(vmemh);
size_t len = MEM_lockfree_allocN_len(vmemh);
+ if (vmemh == NULL) {
+ print_error("Attempt to free NULL pointer\n");
+#ifdef WITH_ASSERT_ABORT
+ abort();
+#endif
+ return;
+ }
+
atomic_sub_u(&totblock, 1);
atomic_sub_z(&mem_in_use, len);
@@ -452,12 +460,12 @@ void MEM_lockfree_set_memory_debug(void)
malloc_debug_memset = true;
}
-uintptr_t MEM_lockfree_get_memory_in_use(void)
+size_t MEM_lockfree_get_memory_in_use(void)
{
return mem_in_use;
}
-uintptr_t MEM_lockfree_get_mapped_memory_in_use(void)
+size_t MEM_lockfree_get_mapped_memory_in_use(void)
{
return mmap_in_use;
}
@@ -470,10 +478,10 @@ unsigned int MEM_lockfree_get_memory_blocks_in_use(void)
/* dummy */
void MEM_lockfree_reset_peak_memory(void)
{
- peak_mem = 0;
+ peak_mem = mem_in_use;
}
-uintptr_t MEM_lockfree_get_peak_memory(void)
+size_t MEM_lockfree_get_peak_memory(void)
{
return peak_mem;
}