Fixed now.

On Sat, Jun 29, 2013 at 12:05 PM, Ton Roosendaal <[email protected]> wrote:
> Hi Brecht,
>
> Buildbot, scons compile error in Windows:
>
> Compiling ==> 'blf.c'
> blf.c
> source\blender\blenlib\BLI_threads.h(38) : fatal error C1083: Cannot open 
> include file: 'pthread.h': No such file or directory
> scons: building terminated because of errors.
>
> No idea why... Windows include files is not my territory :)
>
> -Ton-
>
> --------------------------------------------------------
> Ton Roosendaal  -  [email protected]   -   www.blender.org
> Chairman Blender Foundation - Producer Blender Institute
> Entrepotdok 57A  -  1018AD Amsterdam  -  The Netherlands
>
>
>
> On 28 Jun, 2013, at 15:05, Brecht Van Lommel wrote:
>
>> Revision: 57845
>>          
>> http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57845
>> Author:   blendix
>> Date:     2013-06-28 13:05:15 +0000 (Fri, 28 Jun 2013)
>> Log Message:
>> -----------
>> Fix #35884: crash opening .blend with generated color grid image and preview 
>> render.
>>
>> Printing text on the color grid image would initialize font glyphs from a 
>> thread at
>> the same time as the UI, causing conflicts. The freetype glyph renderer 
>> needs to be
>> mutex locked because it uses a shared buffer internally even when rendering 
>> for
>> different fonts. Also needed to change the image generate function to use 
>> the render
>> monospace font to avoid conflicts in blenfont.
>>
>> What's still weak in the blenfont API is that there is no distinction 
>> between a font
>> and a thread using that font to render with some particular size, style, etc.
>>
>> Modified Paths:
>> --------------
>>    trunk/blender/source/blender/blenfont/intern/blf.c
>>    trunk/blender/source/blender/blenfont/intern/blf_dir.c
>>    trunk/blender/source/blender/blenfont/intern/blf_font.c
>>    trunk/blender/source/blender/blenfont/intern/blf_glyph.c
>>    trunk/blender/source/blender/blenfont/intern/blf_internal_types.h
>>    trunk/blender/source/blender/blenkernel/intern/image_gen.c
>>
>> Modified: trunk/blender/source/blender/blenfont/intern/blf.c
>> ===================================================================
>> --- trunk/blender/source/blender/blenfont/intern/blf.c        2013-06-28 
>> 06:54:49 UTC (rev 57844)
>> +++ trunk/blender/source/blender/blenfont/intern/blf.c        2013-06-28 
>> 13:05:15 UTC (rev 57845)
>> @@ -44,6 +44,7 @@
>> #include "DNA_vec_types.h"
>>
>> #include "BLI_math.h"
>> +#include "BLI_threads.h"
>>
>> #include "BIF_gl.h"
>> #include "BLF_api.h"
>>
>> Modified: trunk/blender/source/blender/blenfont/intern/blf_dir.c
>> ===================================================================
>> --- trunk/blender/source/blender/blenfont/intern/blf_dir.c    2013-06-28 
>> 06:54:49 UTC (rev 57844)
>> +++ trunk/blender/source/blender/blenfont/intern/blf_dir.c    2013-06-28 
>> 13:05:15 UTC (rev 57845)
>> @@ -46,6 +46,7 @@
>> #include "BLI_listbase.h"
>> #include "BLI_path_util.h"
>> #include "BLI_string.h"
>> +#include "BLI_threads.h"
>>
>> #include "BIF_gl.h"
>>
>>
>> Modified: trunk/blender/source/blender/blenfont/intern/blf_font.c
>> ===================================================================
>> --- trunk/blender/source/blender/blenfont/intern/blf_font.c   2013-06-28 
>> 06:54:49 UTC (rev 57844)
>> +++ trunk/blender/source/blender/blenfont/intern/blf_font.c   2013-06-28 
>> 13:05:15 UTC (rev 57845)
>> @@ -48,6 +48,7 @@
>> #include "BLI_rect.h"
>> #include "BLI_string.h"
>> #include "BLI_string_utf8.h"
>> +#include "BLI_threads.h"
>> #include "BLI_linklist.h"  /* linknode */
>>
>> #include "BIF_gl.h"
>> @@ -64,15 +65,18 @@
>>
>> /* freetype2 handle ONLY for this file!. */
>> static FT_Library ft_lib;
>> +static SpinLock ft_lib_mutex;
>>
>> int blf_font_init(void)
>> {
>> +     BLI_spin_init(&ft_lib_mutex);
>>       return FT_Init_FreeType(&ft_lib);
>> }
>>
>> void blf_font_exit(void)
>> {
>>       FT_Done_FreeType(ft_lib);
>> +     BLI_spin_end(&ft_lib_mutex);
>> }
>>
>> void blf_font_size(FontBLF *font, unsigned int size, unsigned int dpi)
>> @@ -572,6 +576,7 @@
>>       font->buf_info.col[3] = 0;
>>
>>       font->ft_lib = ft_lib;
>> +     font->ft_lib_mutex = &ft_lib_mutex;
>> }
>>
>> FontBLF *blf_font_new(const char *name, const char *filename)
>>
>> Modified: trunk/blender/source/blender/blenfont/intern/blf_glyph.c
>> ===================================================================
>> --- trunk/blender/source/blender/blenfont/intern/blf_glyph.c  2013-06-28 
>> 06:54:49 UTC (rev 57844)
>> +++ trunk/blender/source/blender/blenfont/intern/blf_glyph.c  2013-06-28 
>> 13:05:15 UTC (rev 57845)
>> @@ -48,6 +48,7 @@
>>
>> #include "BLI_listbase.h"
>> #include "BLI_rect.h"
>> +#include "BLI_threads.h"
>>
>> #include "BIF_gl.h"
>> #include "BLF_api.h"
>> @@ -224,6 +225,19 @@
>>       if (g)
>>               return g;
>>
>> +     /* glyphs are dynamically created as needed by font rendering. this 
>> means that
>> +      * to make font rendering thread safe we have to do locking here. note 
>> that this
>> +      * must be a lock for the whole library and not just per font, because 
>> the font
>> +      * renderer uses a shared buffer internally */
>> +     BLI_spin_lock(font->ft_lib_mutex);
>> +
>> +     /* search again after locking */
>> +     g = blf_glyph_search(font->glyph_cache, c);
>> +     if (g) {
>> +             BLI_spin_unlock(font->ft_lib_mutex);
>> +             return g;
>> +     }
>> +
>>       if (font->flags & BLF_HINTING)
>>               flags &= ~FT_LOAD_NO_HINTING;
>>
>> @@ -231,8 +245,11 @@
>>               err = FT_Load_Glyph(font->face, (FT_UInt)index, 
>> FT_LOAD_TARGET_MONO);
>>       else
>>               err = FT_Load_Glyph(font->face, (FT_UInt)index, flags);
>> -     if (err)
>> +
>> +     if (err) {
>> +             BLI_spin_unlock(font->ft_lib_mutex);
>>               return NULL;
>> +     }
>>
>>       /* get the glyph. */
>>       slot = font->face->glyph;
>> @@ -251,8 +268,10 @@
>>               err = FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL);
>>       }
>>
>> -     if (err || slot->format != FT_GLYPH_FORMAT_BITMAP)
>> +     if (err || slot->format != FT_GLYPH_FORMAT_BITMAP) {
>> +             BLI_spin_unlock(font->ft_lib_mutex);
>>               return NULL;
>> +     }
>>
>>       g = (GlyphBLF *)MEM_callocN(sizeof(GlyphBLF), "blf_glyph_add");
>>       g->c = c;
>> @@ -289,6 +308,9 @@
>>
>>       key = blf_hash(g->c);
>>       BLI_addhead(&(font->glyph_cache->bucket[key]), g);
>> +
>> +     BLI_spin_unlock(font->ft_lib_mutex);
>> +
>>       return g;
>> }
>>
>>
>> Modified: trunk/blender/source/blender/blenfont/intern/blf_internal_types.h
>> ===================================================================
>> --- trunk/blender/source/blender/blenfont/intern/blf_internal_types.h 
>> 2013-06-28 06:54:49 UTC (rev 57844)
>> +++ trunk/blender/source/blender/blenfont/intern/blf_internal_types.h 
>> 2013-06-28 13:05:15 UTC (rev 57845)
>> @@ -217,6 +217,9 @@
>>       /* freetype2 lib handle. */
>>       FT_Library ft_lib;
>>
>> +     /* Mutex lock for library */
>> +     SpinLock *ft_lib_mutex;
>> +
>>       /* freetype2 face. */
>>       FT_Face face;
>>
>>
>> Modified: trunk/blender/source/blender/blenkernel/intern/image_gen.c
>> ===================================================================
>> --- trunk/blender/source/blender/blenkernel/intern/image_gen.c        
>> 2013-06-28 06:54:49 UTC (rev 57844)
>> +++ trunk/blender/source/blender/blenkernel/intern/image_gen.c        
>> 2013-06-28 13:05:15 UTC (rev 57845)
>> @@ -287,7 +287,7 @@
>>       int x, y;
>>       int pen_x, pen_y;
>>       char text[3] = {'A', '1', '\0'};
>> -     const int mono = blf_mono_font;
>> +     const int mono = blf_mono_font_render;
>>
>>       BLF_size(mono, 54, 72); /* hard coded size! */
>>
>>
>> _______________________________________________
>> Bf-blender-cvs mailing list
>> [email protected]
>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>
> _______________________________________________
> Bf-committers mailing list
> [email protected]
> http://lists.blender.org/mailman/listinfo/bf-committers
_______________________________________________
Bf-committers mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-committers

Reply via email to