[Bf-blender-cvs] [04964ff1f4e] blender2.8: GWN: Fix compilation on windows

Germano noreply at git.blender.org
Wed Feb 21 22:58:51 CET 2018


Commit: 04964ff1f4ef9ad23fa3e6cb0444bf28dd6813b5
Author: Germano
Date:   Wed Feb 21 18:58:29 2018 -0300
Branches: blender2.8
https://developer.blender.org/rB04964ff1f4ef9ad23fa3e6cb0444bf28dd6813b5

GWN: Fix compilation on windows

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

M	intern/gawain/src/gwn_vertex_array_id.cpp

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

diff --git a/intern/gawain/src/gwn_vertex_array_id.cpp b/intern/gawain/src/gwn_vertex_array_id.cpp
index 27010f03bc0..1e833f7b2d0 100644
--- a/intern/gawain/src/gwn_vertex_array_id.cpp
+++ b/intern/gawain/src/gwn_vertex_array_id.cpp
@@ -34,6 +34,7 @@ struct Gwn_Context {
 	std::mutex orphans_mutex; // todo: try spinlock instead
 #if TRUST_NO_ONE
 	pthread_t thread; // Thread on which this context is active.
+	bool thread_is_used;
 #endif
 };
 
@@ -57,6 +58,7 @@ Gwn_Context* GWN_context_create(void)
 	assert(thread_is_main());
 #endif
 	Gwn_Context* ctx = (Gwn_Context*)calloc(1, sizeof(Gwn_Context));
+	new (&ctx->orphans_mutex) std::mutex();
 	glGenVertexArrays(1, &ctx->default_vao);
 	GWN_context_active_set(ctx);
 	return ctx;
@@ -68,10 +70,11 @@ void GWN_context_discard(Gwn_Context* ctx)
 #if TRUST_NO_ONE
 	// Make sure no other thread has locked it.
 	assert(ctx == active_ctx);
-	assert(ctx->thread == pthread_self());
+	assert(pthread_equal(pthread_self(), ctx->thread));
 	assert(ctx->orphaned_vertarray_ids.empty());
 #endif
 	glDeleteVertexArrays(1, &ctx->default_vao);
+	(&ctx->orphans_mutex)->~mutex();
 	free(ctx);
 	active_ctx = NULL;
 	}
@@ -81,13 +84,14 @@ void GWN_context_active_set(Gwn_Context* ctx)
 	{
 #if TRUST_NO_ONE
 	if (active_ctx)
-		active_ctx->thread = 0;
+		active_ctx->thread_is_used = false;
 	// Make sure no other context is already bound to this thread.
 	if (ctx)
 		{
 		// Make sure no other thread has locked it.
-		assert(ctx->thread == 0);
+		assert(ctx->thread_is_used == false);
 		ctx->thread = pthread_self();
+		ctx->thread_is_used = true;
 		}
 #endif
 	if (ctx)
@@ -104,7 +108,7 @@ GLuint GWN_vao_default(void)
 	{
 #if TRUST_NO_ONE
 	assert(active_ctx); // need at least an active context
-	assert(active_ctx->thread == pthread_self()); // context has been activated by another thread!
+	assert(pthread_equal(pthread_self(), active_ctx->thread)); // context has been activated by another thread!
 #endif
 	return active_ctx->default_vao;
 	}
@@ -113,7 +117,7 @@ GLuint GWN_vao_alloc(void)
 	{
 #if TRUST_NO_ONE
 	assert(active_ctx); // need at least an active context
-	assert(active_ctx->thread == pthread_self()); // context has been activated by another thread!
+	assert(pthread_equal(pthread_self(), active_ctx->thread)); // context has been activated by another thread!
 #endif
 	clear_orphans(active_ctx);
 
@@ -125,6 +129,9 @@ GLuint GWN_vao_alloc(void)
 // this can be called from multiple thread
 void GWN_vao_free(GLuint vao_id, Gwn_Context* ctx)
 	{
+#if TRUST_NO_ONE
+	assert(ctx);
+#endif
 	if (ctx == active_ctx)
 		glDeleteVertexArrays(1, &vao_id);
 	else



More information about the Bf-blender-cvs mailing list