Fix (unreported) load image code calling icin/preview update from non-Main thread.
Icin/preview only works in main thread, while image loading can be done from others too... This could have generated random crashes and such.
This commit is contained in:
@@ -514,8 +514,12 @@ static int icon_id_ensure_create_icon(struct ID *id)
|
|||||||
|
|
||||||
int BKE_icon_id_ensure(struct ID *id)
|
int BKE_icon_id_ensure(struct ID *id)
|
||||||
{
|
{
|
||||||
if (!id || G.background)
|
/* Never handle icons in non-main thread! */
|
||||||
|
BLI_assert(BLI_thread_is_main());
|
||||||
|
|
||||||
|
if (!id || G.background) {
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (id->icon_id)
|
if (id->icon_id)
|
||||||
return id->icon_id;
|
return id->icon_id;
|
||||||
|
|||||||
@@ -3133,9 +3133,11 @@ static void image_create_multilayer(Image *ima, ImBuf *ibuf, int framenr)
|
|||||||
/* common stuff to do with images after loading */
|
/* common stuff to do with images after loading */
|
||||||
static void image_initialize_after_load(Image *ima, ImBuf *ibuf)
|
static void image_initialize_after_load(Image *ima, ImBuf *ibuf)
|
||||||
{
|
{
|
||||||
/* preview is NULL when it has never been used as an icon before */
|
/* Preview is NULL when it has never been used as an icon before.
|
||||||
if (G.background == 0 && ima->preview == NULL)
|
* Never handle previews/icons outside of main thread. */
|
||||||
|
if (G.background == 0 && ima->preview == NULL && BLI_thread_is_main()) {
|
||||||
BKE_icon_changed(BKE_icon_id_ensure(&ima->id));
|
BKE_icon_changed(BKE_icon_id_ensure(&ima->id));
|
||||||
|
}
|
||||||
|
|
||||||
/* fields */
|
/* fields */
|
||||||
if (ima->flag & IMA_FIELDS) {
|
if (ima->flag & IMA_FIELDS) {
|
||||||
|
|||||||
Reference in New Issue
Block a user