[Bf-blender-cvs] [64513df8b63] master: Fix T82849: Assert When Unlinking "Edit Source" Text Data-block.

Bastien Montagne noreply at git.blender.org
Mon Nov 23 11:57:52 CET 2020


Commit: 64513df8b63a73ddea9015aa133d321fe1f062b0
Author: Bastien Montagne
Date:   Mon Nov 23 11:56:40 2020 +0100
Branches: master
https://developer.blender.org/rB64513df8b63a73ddea9015aa133d321fe1f062b0

Fix T82849: Assert When Unlinking "Edit Source" Text Data-block.

Simplify and sanitize handling of usercounts for Text IDs generated
trhough `BKE_text_load_ex`.

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

M	source/blender/blenkernel/intern/text.c
M	source/blender/editors/interface/interface_ops.c
M	source/blender/editors/space_text/text_ops.c
M	source/blender/makesrna/intern/rna_main_api.c

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

diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c
index 6f4ac4c44a0..93795af7cd7 100644
--- a/source/blender/blenkernel/intern/text.c
+++ b/source/blender/blenkernel/intern/text.c
@@ -459,6 +459,12 @@ bool BKE_text_reload(Text *text)
   return true;
 }
 
+/** Load a text file.
+ *
+ * \param is_internal If \a true, this text data-block only exists in memory, not as a file on
+ * disk.
+ *
+ * \note: text data-blocks have no user by default, only the 'real user' flag. */
 Text *BKE_text_load_ex(Main *bmain, const char *file, const char *relpath, const bool is_internal)
 {
   unsigned char *buffer;
@@ -478,8 +484,9 @@ Text *BKE_text_load_ex(Main *bmain, const char *file, const char *relpath, const
   }
 
   ta = BKE_libblock_alloc(bmain, ID_TXT, BLI_path_basename(filepath_abs), 0);
-  /* Texts always have 'real' user (see also read code). */
+  /* Texts have no user by default... Only the 'real' user flag. */
   id_us_ensure_real(&ta->id);
+  id_us_min(&ta->id);
 
   BLI_listbase_clear(&ta->lines);
   ta->curl = ta->sell = NULL;
@@ -511,6 +518,9 @@ Text *BKE_text_load_ex(Main *bmain, const char *file, const char *relpath, const
   return ta;
 }
 
+/** Load a text file.
+ *
+ * \note: text data-blocks have no user by default, only the 'real user' flag. */
 Text *BKE_text_load(Main *bmain, const char *file, const char *relpath)
 {
   return BKE_text_load_ex(bmain, file, relpath, false);
diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c
index 2b91d1b273d..0d1e2802242 100644
--- a/source/blender/editors/interface/interface_ops.c
+++ b/source/blender/editors/interface/interface_ops.c
@@ -1316,7 +1316,6 @@ static int editsource_text_edit(bContext *C,
 
   if (text == NULL) {
     text = BKE_text_load(bmain, filepath, BKE_main_blendfile_path(bmain));
-    id_us_ensure_real(&text->id);
   }
 
   if (text == NULL) {
diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c
index 52a5ff609d8..f8b7c62686f 100644
--- a/source/blender/editors/space_text/text_ops.c
+++ b/source/blender/editors/space_text/text_ops.c
@@ -338,8 +338,6 @@ static int text_open_exec(bContext *C, wmOperator *op)
   RNA_string_get(op->ptr, "filepath", str);
 
   text = BKE_text_load_ex(bmain, str, BKE_main_blendfile_path(bmain), internal);
-  /* Texts have no user by default... Only the 'real' user flag. */
-  id_us_min(&text->id);
 
   if (!text) {
     if (op->customdata) {
diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index d2381ac7577..21ff44ed253 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -543,8 +543,6 @@ static Text *rna_Main_texts_load(Main *bmain,
 
   errno = 0;
   txt = BKE_text_load_ex(bmain, filepath, BKE_main_blendfile_path(bmain), is_internal);
-  /* Texts have no user by default... Only the 'real' user flag. */
-  id_us_min(&txt->id);
 
   if (!txt) {
     BKE_reportf(reports,



More information about the Bf-blender-cvs mailing list