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:
authorSybren A. Stüvel <sybren@blender.org>2021-10-19 17:17:04 +0300
committerSybren A. Stüvel <sybren@blender.org>2021-10-19 17:17:04 +0300
commit1c5722ba071ac08042f2e3150495b865a0ffa95a (patch)
tree0e42ee74d5a9dbc3343a1da895dd406f10e4812a /source/blender/editors/asset/ED_asset_mark_clear.h
parent0a6cf3ed0c64a0e4e58ecd40a491d0e6c93532f2 (diff)
Fix T91197: marking assets from Python may crash
When using `asset_mark` function from a Python script and afterwards updating the preview image, a crash might happen. The preview image is generated by the `asset_mark` function. This may happen on a background thread, introducing potential synchronization issues. This patch fixes this by separating the preview generation `ID.asset_generate_preview` from the mark as asset `ID.asset_mark`. Note: this separation of "mark as asset" and "generate preview" also applies to the `ED_asset_mark_id()` C function; if it is desired to have previews rendered after marking as asset, a call to `ED_asset_generate_preview()` is now also required. Reviewed By: sybren Maniphest Tasks: T91197 Differential Revision: https://developer.blender.org/D12922
Diffstat (limited to 'source/blender/editors/asset/ED_asset_mark_clear.h')
-rw-r--r--source/blender/editors/asset/ED_asset_mark_clear.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/source/blender/editors/asset/ED_asset_mark_clear.h b/source/blender/editors/asset/ED_asset_mark_clear.h
index d8b8f15a109..bab1d1bf8a5 100644
--- a/source/blender/editors/asset/ED_asset_mark_clear.h
+++ b/source/blender/editors/asset/ED_asset_mark_clear.h
@@ -34,7 +34,14 @@ struct bContext;
*
* \return whether the datablock was marked as asset; false when it is not capable of becoming an
* asset, or when it already was an asset. */
-bool ED_asset_mark_id(const struct bContext *C, struct ID *id);
+bool ED_asset_mark_id(struct ID *id);
+
+/**
+ * Generate preview image for the given datablock.
+ *
+ * The preview image might be generated using a background thread.
+ */
+void ED_asset_generate_preview(const struct bContext *C, struct ID *id);
/**
* Remove the asset metadata, turning the ID into a "normal" ID.