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/mallocn_lockfree_impl.c')
-rw-r--r--intern/guardedalloc/intern/mallocn_lockfree_impl.c43
1 files changed, 34 insertions, 9 deletions
diff --git a/intern/guardedalloc/intern/mallocn_lockfree_impl.c b/intern/guardedalloc/intern/mallocn_lockfree_impl.c
index ce8a5b29ece..4c6ba0cb256 100644
--- a/intern/guardedalloc/intern/mallocn_lockfree_impl.c
+++ b/intern/guardedalloc/intern/mallocn_lockfree_impl.c
@@ -64,9 +64,9 @@ enum {
MEMHEAD_ALIGN_FLAG = 2,
};
-#define MEMHEAD_FROM_PTR(ptr) (((MemHead*) vmemh) - 1)
+#define MEMHEAD_FROM_PTR(ptr) (((MemHead*) ptr) - 1)
#define PTR_FROM_MEMHEAD(memhead) (memhead + 1)
-#define MEMHEAD_ALIGNED_FROM_PTR(ptr) (((MemHeadAligned*) vmemh) - 1)
+#define MEMHEAD_ALIGNED_FROM_PTR(ptr) (((MemHeadAligned*) ptr) - 1)
#define MEMHEAD_IS_MMAP(memhead) ((memhead)->len & (size_t) MEMHEAD_MMAP_FLAG)
#define MEMHEAD_IS_ALIGNED(memhead) ((memhead)->len & (size_t) MEMHEAD_ALIGN_FLAG)
@@ -76,12 +76,7 @@ enum {
MEM_INLINE void update_maximum(size_t *maximum_value, size_t value)
{
#ifdef USE_ATOMIC_MAX
- size_t prev_value = *maximum_value;
- while (prev_value < value) {
- if (atomic_cas_z(maximum_value, prev_value, value) != prev_value) {
- break;
- }
- }
+ atomic_fetch_and_update_max_z(maximum_value, value);
#else
*maximum_value = value > *maximum_value ? value : *maximum_value;
#endif
@@ -298,6 +293,21 @@ void *MEM_lockfree_callocN(size_t len, const char *str)
return NULL;
}
+void *MEM_lockfree_calloc_arrayN(size_t len, size_t size, const char *str)
+{
+ size_t total_size;
+ if (UNLIKELY(!MEM_size_safe_multiply(len, size, &total_size))) {
+ print_error("Calloc array aborted due to integer overflow: "
+ "len=" SIZET_FORMAT "x" SIZET_FORMAT " in %s, total %u\n",
+ SIZET_ARG(len), SIZET_ARG(size), str,
+ (unsigned int) mem_in_use);
+ abort();
+ return NULL;
+ }
+
+ return MEM_lockfree_callocN(total_size, str);
+}
+
void *MEM_lockfree_mallocN(size_t len, const char *str)
{
MemHead *memh;
@@ -323,6 +333,21 @@ void *MEM_lockfree_mallocN(size_t len, const char *str)
return NULL;
}
+void *MEM_lockfree_malloc_arrayN(size_t len, size_t size, const char *str)
+{
+ size_t total_size;
+ if (UNLIKELY(!MEM_size_safe_multiply(len, size, &total_size))) {
+ print_error("Malloc array aborted due to integer overflow: "
+ "len=" SIZET_FORMAT "x" SIZET_FORMAT " in %s, total %u\n",
+ SIZET_ARG(len), SIZET_ARG(size), str,
+ (unsigned int) mem_in_use);
+ abort();
+ return NULL;
+ }
+
+ return MEM_lockfree_mallocN(total_size, str);
+}
+
void *MEM_lockfree_mallocN_aligned(size_t len, size_t alignment, const char *str)
{
MemHeadAligned *memh;
@@ -444,7 +469,7 @@ void MEM_lockfree_set_error_callback(void (*func)(const char *))
error_callback = func;
}
-bool MEM_lockfree_check_memory_integrity(void)
+bool MEM_lockfree_consistency_check(void)
{
return true;
}