[gthumb] jpeg loader: fixed possible multithread problem



commit 036aec4ecba6f38a028042b9e20400fa9a5caf61
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Fri Jun 28 16:32:46 2013 +0200

    jpeg loader: fixed possible multithread problem
    
    initialize the tables inside a mutex lock

 extensions/cairo_io/cairo-image-surface-jpeg.c |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)
---
diff --git a/extensions/cairo_io/cairo-image-surface-jpeg.c b/extensions/cairo_io/cairo-image-surface-jpeg.c
index 61d5eef..9c794e4 100644
--- a/extensions/cairo_io/cairo-image-surface-jpeg.c
+++ b/extensions/cairo_io/cairo-image-surface-jpeg.c
@@ -85,6 +85,7 @@ static int           *YCbCr_R_Cr_Tab = NULL;
 static int           *YCbCr_G_Cb_Tab = NULL;
 static int           *YCbCr_G_Cr_Tab = NULL;
 static int           *YCbCr_B_Cb_Tab = NULL;
+static GStaticMutex   Tables_Mutex = G_STATIC_MUTEX_INIT;
 
 
 #define SCALE_FACTOR   16
@@ -96,6 +97,8 @@ static int           *YCbCr_B_Cb_Tab = NULL;
 static void
 CMYK_table_init (void)
 {
+       g_static_mutex_lock (&Tables_Mutex);
+
        if (CMYK_Tab == NULL) {
                int    v, k, i;
                double k1;
@@ -110,12 +113,16 @@ CMYK_table_init (void)
                                CMYK_Tab[i++] = (double) v * k1;
                }
        }
+
+       g_static_mutex_unlock (&Tables_Mutex);
 }
 
 
 static void
 YCbCr_tables_init (void)
 {
+       g_static_mutex_lock (&Tables_Mutex);
+
        if (YCbCr_R_Cr_Tab == NULL) {
                int i, v;
 
@@ -125,12 +132,14 @@ YCbCr_tables_init (void)
                YCbCr_B_Cb_Tab = g_new (int, 256);
 
                for (i = 0, v = -128; i <= 255; i++, v++) {
-                       YCbCr_R_Cr_Tab[i] = SCALE_DOWN (SCALE_UP(1.402) * v + ONE_HALF);
+                       YCbCr_R_Cr_Tab[i] = SCALE_DOWN (SCALE_UP (1.402) * v + ONE_HALF);
                        YCbCr_G_Cb_Tab[i] = - SCALE_UP (0.34414) * v;
                        YCbCr_G_Cr_Tab[i] = - SCALE_UP (0.71414) * v + ONE_HALF;
-                       YCbCr_B_Cb_Tab[i] = SCALE_DOWN (SCALE_UP(1.77200) * v + ONE_HALF);
+                       YCbCr_B_Cb_Tab[i] = SCALE_DOWN (SCALE_UP (1.77200) * v + ONE_HALF);
                }
        }
+
+       g_static_mutex_unlock (&Tables_Mutex);
 }
 
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]