[Bf-blender-cvs] [ac797f0] lib-link-rework-temp: Fix broken multi-lib linking, and remove Main locking around core linking code for now.

Bastien Montagne noreply at git.blender.org
Mon Sep 21 17:47:58 CEST 2015


Commit: ac797f03ef4af18f2b3f35079aa12fda5f0b2e9e
Author: Bastien Montagne
Date:   Mon Sep 21 17:42:32 2015 +0200
Branches: lib-link-rework-temp
https://developer.blender.org/rBac797f03ef4af18f2b3f35079aa12fda5f0b2e9e

Fix broken multi-lib linking, and remove Main locking around core linking code for now.

We need to append to linklist, or our library indices would be reversed compared to lib list...

As for locking, we need reentrant one here if we want to use it. :(

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

M	source/blender/windowmanager/intern/wm_operators.c

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

diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 06e1619..1597c1e 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -2618,12 +2618,13 @@ typedef struct WMLinkAppendDataItem {
 } WMLinkAppendDataItem;
 
 typedef struct WMLinkAppendData {
-	LinkNode *libraries;
-	LinkNode *items;
+	LinkNodePair libraries;
+	LinkNodePair items;
 	int num_libraries;
 	int num_items;
 	short flag;
 
+	/* Internal 'private' data */
 	MemArena *memarena;
 } WMLinkAppendData;
 
@@ -2651,7 +2652,7 @@ static void wm_link_append_data_library_add(WMLinkAppendData *lapp_data, const c
 	char *libpath = BLI_memarena_alloc(lapp_data->memarena, len);
 
 	BLI_strncpy(libpath, libname, len);
-	BLI_linklist_prepend_arena(&lapp_data->libraries, libpath, lapp_data->memarena);
+	BLI_linklist_append_arena(&lapp_data->libraries, libpath, lapp_data->memarena);
 	lapp_data->num_libraries++;
 }
 
@@ -2669,7 +2670,7 @@ static WMLinkAppendDataItem *wm_link_append_data_item_add(
 	item->new_id = NULL;
 	item->customdata = customdata;
 
-	BLI_linklist_prepend_arena(&lapp_data->items, item, lapp_data->memarena);
+	BLI_linklist_append_arena(&lapp_data->items, item, lapp_data->memarena);
 	lapp_data->num_items++;
 
 	return item;
@@ -2690,7 +2691,7 @@ static void wm_link_do(
 
 	BLI_assert(lapp_data->num_items && lapp_data->num_libraries);
 
-	for (lib_idx = 0, liblink = lapp_data->libraries; liblink; lib_idx++, liblink = liblink->next) {
+	for (lib_idx = 0, liblink = lapp_data->libraries.list; liblink; lib_idx++, liblink = liblink->next) {
 		char *libname = liblink->link;
 		int idcode;
 
@@ -2718,7 +2719,7 @@ static void wm_link_do(
 		/* For each lib file, we loop until we have (tried) to link all items belonging to that lib. */
 		BLI_BITMAP_SET_ALL(done_items, false, lapp_data->num_items);
 		while (true) {
-			for (item_idx = 0, idcode = -1, itemlink = lapp_data->items;
+			for (item_idx = 0, idcode = -1, itemlink = lapp_data->items.list;
 			     itemlink;
 			     item_idx++, itemlink = itemlink->next)
 			{
@@ -2851,8 +2852,6 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
 		}
 		RNA_END;
 
-		lib_idx = 0;
-
 		RNA_BEGIN (op->ptr, itemptr, "files")
 		{
 			RNA_string_get(&itemptr, "name", relname);
@@ -2866,8 +2865,6 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
 					continue;
 				}
 
-				printf("linking %s\n", path);
-
 				lib_idx = GET_INT_FROM_POINTER(BLI_ghash_lookup(libraries, libname));
 
 				item = wm_link_append_data_item_add(lapp_data, name, BKE_idcode_from_name(group), NULL);
@@ -2886,11 +2883,12 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
 		BLI_BITMAP_ENABLE(item->libraries, 0);
 	}
 
-	BKE_main_lock(bmain);
+	/* XXX We'd need re-entrant locking on Main for this to work... */
+	/* BKE_main_lock(bmain); */
 
 	wm_link_do(lapp_data, op->reports, bmain, scene, CTX_wm_view3d(C));
 
-	BKE_main_unlock(bmain);
+	/* BKE_main_unlock(bmain); */
 
 	wm_link_append_data_free(lapp_data);




More information about the Bf-blender-cvs mailing list