[Bf-blender-cvs] [42fd1b9] master: Cycles: Fix issues with stack allocator in MSVC

Sergey Sharybin noreply at git.blender.org
Mon Apr 25 13:53:33 CEST 2016


Commit: 42fd1b9abe90c301632c9279fd29ec6650243430
Author: Sergey Sharybin
Date:   Mon Apr 25 13:50:27 2016 +0200
Branches: master
https://developer.blender.org/rB42fd1b9abe90c301632c9279fd29ec6650243430

Cycles: Fix issues with stack allocator in MSVC

Couple of issues here:

- Was a bug in heap memory allocation when run out
  of allowed stack memory.

- Debug MSVC was failing because it uses separate
  allocator for some sort of internal proxy thing,
  which seems to be unable to be using stack memory
  because allocator is being created in non-persistent
  stack location.

===================================================================

M	intern/cycles/util/util_stack_allocator.h

===================================================================

diff --git a/intern/cycles/util/util_stack_allocator.h b/intern/cycles/util/util_stack_allocator.h
index 1acd2b1..d7aab5b 100644
--- a/intern/cycles/util/util_stack_allocator.h
+++ b/intern/cycles/util/util_stack_allocator.h
@@ -40,14 +40,17 @@ public:
 	/* Allocator construction/destruction. */
 
 	StackAllocator()
-	: pointer_(0) {}
+	: pointer_(0),
+	  use_stack_(true) {}
 
 	StackAllocator(const StackAllocator&)
-	: pointer_(0) {}
+	: pointer_(0),
+	  use_stack_(true) {}
 
 	template <class U>
 	StackAllocator(const StackAllocator<SIZE, U>&)
-	: pointer_(0) {}
+	: pointer_(0),
+	  use_stack_(false) {}
 
 	/* Memory allocation/deallocation. */
 
@@ -57,7 +60,7 @@ public:
 		if(n == 0) {
 			return NULL;
 		}
-		if(pointer_ + n >= SIZE) {
+		if(pointer_ + n >= SIZE || use_stack_ == false) {
 			size_t size = n * sizeof(T);
 			util_guarded_mem_alloc(size);
 			T *mem;
@@ -69,6 +72,7 @@ public:
 			if(mem == NULL) {
 				throw std::bad_alloc();
 			}
+			return mem;
 		}
 		T *mem = &data_[pointer_];
 		pointer_ += n;
@@ -157,6 +161,7 @@ public:
 
 private:
 	int pointer_;
+	bool use_stack_;
 	T data_[SIZE];
 };




More information about the Bf-blender-cvs mailing list