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:
Bastien Montagne 2018-05-11 10:48:04 +02:00
parent 0385b33f0b
commit 13beeb5892
2 changed files with 9 additions and 3 deletions

@ -514,8 +514,12 @@ static int icon_id_ensure_create_icon(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;
}
if (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 */
static void image_initialize_after_load(Image *ima, ImBuf *ibuf)
{
/* preview is NULL when it has never been used as an icon before */
if (G.background == 0 && ima->preview == NULL)
/* Preview is NULL when it has never been used as an icon before.
* 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));
}
/* fields */
if (ima->flag & IMA_FIELDS) {