[Bf-blender-cvs] [6135556] master: Replace Main->lock with an anoynous structure pointer

Sergey Sharybin noreply at git.blender.org
Thu Jun 26 11:22:35 CEST 2014


Commit: 6135556f4556f0416f7ded737b26e342986ae1bf
Author: Sergey Sharybin
Date:   Thu Jun 26 14:55:40 2014 +0600
https://developer.blender.org/rB6135556f4556f0416f7ded737b26e342986ae1bf

Replace Main->lock with an anoynous structure pointer

This way it's not needed to include BLI_threads.h from the
BKE_main.h which helps avoiding adding PThreads includes to
each library which uses Main on Windows.

>From the API point of view it's now MainLock* and to lock or
unlock the main you're to use BKE_main_(un)lock().

This solves compilation error on Windows with SCons.

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

M	source/blender/blenkernel/BKE_library.h
M	source/blender/blenkernel/BKE_main.h
M	source/blender/blenkernel/intern/library.c
M	source/blender/blenkernel/intern/material.c

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

diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index c78ea21..0372931 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -84,6 +84,9 @@ void BKE_libblock_free_data(struct Main *bmain, struct ID *id);
 struct Main *BKE_main_new(void);
 void BKE_main_free(struct Main *mainvar);
 
+void BKE_main_lock(struct Main *bmain);
+void BKE_main_unlock(struct Main *bmain);
+
 void BKE_main_id_tag_idcode(struct Main *mainvar, const short type, const bool tag);
 void BKE_main_id_tag_listbase(struct ListBase *lb, const bool tag);
 void BKE_main_id_tag_all(struct Main *mainvar, const bool tag);
diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index ade5733..82b0312 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -41,7 +41,6 @@
  *
  */
 #include "DNA_listBase.h"
-#include "BLI_threads.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -49,6 +48,7 @@ extern "C" {
 
 struct EvaluationContext;
 struct Library;
+struct MainLock;
 
 typedef struct Main {
 	struct Main *next, *prev;
@@ -98,7 +98,7 @@ typedef struct Main {
 	/* Evaluation context used by viewport */
 	struct EvaluationContext *eval_ctx;
 
-	SpinLock lock;
+	struct MainLock *lock;
 } Main;
 
 #define MAIN_VERSION_ATLEAST(main, ver, subver) \
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 9a74edb..a5c52e9 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -71,6 +71,7 @@
 #include "BLI_blenlib.h"
 #include "BLI_utildefines.h"
 
+#include "BLI_threads.h"
 #include "BLF_translation.h"
 
 #include "BKE_action.h"
@@ -747,14 +748,14 @@ void *BKE_libblock_alloc(Main *bmain, short type, const char *name)
 	
 	id = alloc_libblock_notest(type);
 	if (id) {
-		BLI_spin_lock(&bmain->lock);
+		BKE_main_lock(bmain);
 		BLI_addtail(lb, id);
 		id->us = 1;
 		id->icon_id = 0;
 		*( (short *)id->name) = type;
 		new_id(lb, id, name);
 		/* alphabetic insertion: is in new_id */
-		BLI_spin_unlock(&bmain->lock);
+		BKE_main_unlock(bmain);
 	}
 	DAG_id_type_tag(bmain, type);
 	return id;
@@ -1008,7 +1009,7 @@ void BKE_libblock_free_ex(Main *bmain, void *idv, bool do_id_user)
 	}
 
 	/* avoid notifying on removed data */
-	BLI_spin_lock(&bmain->lock);
+	BKE_main_lock(bmain);
 
 	if (free_notifier_reference_cb)
 		free_notifier_reference_cb(id);
@@ -1016,7 +1017,7 @@ void BKE_libblock_free_ex(Main *bmain, void *idv, bool do_id_user)
 	BLI_remlink(lb, id);
 
 	BKE_libblock_free_data(bmain, id);
-	BLI_spin_unlock(&bmain->lock);
+	BKE_main_unlock(bmain);
 
 	MEM_freeN(id);
 }
@@ -1048,7 +1049,8 @@ Main *BKE_main_new(void)
 	Main *bmain = MEM_callocN(sizeof(Main), "new main");
 	bmain->eval_ctx = MEM_callocN(sizeof(EvaluationContext),
 	                              "EvaluationContext");
-	BLI_spin_init(&bmain->lock);
+	bmain->lock = MEM_mallocN(sizeof(SpinLock), "main lock");
+	BLI_spin_init(bmain->lock);
 	return bmain;
 }
 
@@ -1111,11 +1113,22 @@ void BKE_main_free(Main *mainvar)
 		}
 	}
 
-	BLI_spin_end(&mainvar->lock);
+	BLI_spin_end(mainvar->lock);
+	MEM_freeN(mainvar->lock);
 	MEM_freeN(mainvar->eval_ctx);
 	MEM_freeN(mainvar);
 }
 
+void BKE_main_lock(struct Main *bmain)
+{
+	BLI_spin_lock(bmain->lock);
+}
+
+void BKE_main_unlock(struct Main *bmain)
+{
+	BLI_spin_unlock(bmain->lock);
+}
+
 /* ***************** ID ************************ */
 
 
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 4f6f234..971db19 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -780,13 +780,13 @@ void test_object_materials(Main *bmain, ID *id)
 		return;
 	}
 
-	BLI_spin_lock(&bmain->lock);
+	BKE_main_lock(bmain);
 	for (ob = bmain->object.first; ob; ob = ob->id.next) {
 		if (ob->data == id) {
 			BKE_material_resize_object(ob, *totcol, false);
 		}
 	}
-	BLI_spin_unlock(&bmain->lock);
+	BKE_main_unlock(bmain);
 }
 
 void assign_material_id(ID *id, Material *ma, short act)




More information about the Bf-blender-cvs mailing list