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:
-rw-r--r--source/blender/blenkernel/BKE_library.h3
-rw-r--r--source/blender/blenkernel/BKE_main.h4
-rw-r--r--source/blender/blenkernel/intern/library.c25
-rw-r--r--source/blender/blenkernel/intern/material.c4
4 files changed, 26 insertions, 10 deletions
diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index c78ea21b9dd..0372931dc49 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 ade5733fa4f..82b03127237 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 9a74edb03c9..a5c52e9d7e8 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 4f6f234c6e1..971db1997de 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)