Protect gtkhtml writes from threads
authorJose Dapena Paz <jdapena@igalia.com>
Tue, 14 Apr 2009 16:57:09 +0000 (16:57 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Tue, 14 Apr 2009 16:57:09 +0000 (16:57 +0000)
Remove gdk threads lock handling in msg view as now it happens in stream

pmo-trunk-r8794

src/hildon2/modest-msg-view-window.c
src/widgets/modest-tny-stream-gtkhtml.c

index 0e5b87d..2ae8df1 100644 (file)
@@ -3125,26 +3125,20 @@ on_fetch_image_thread (gpointer userdata)
                                while (G_UNLIKELY (nb_written < nb_read)) {
                                        gssize len;
 
-                                       gdk_threads_enter ();
                                        len = tny_stream_write (fidata->output_stream, buffer + nb_written,
                                                                nb_read - nb_written);
-                                       gdk_threads_leave ();
                                        if (G_UNLIKELY (len < 0))
                                                break;
                                        nb_written += len;
                                }
                        }
                }
-               gdk_threads_enter ();
                tny_stream_close (cache_stream);
                g_object_unref (cache_stream);
-               gdk_threads_leave ();
        }
 
-       gdk_threads_enter ();
        tny_stream_close (fidata->output_stream);
        g_object_unref (fidata->output_stream);
-       gdk_threads_leave ();
 
        g_idle_add (on_fetch_image_idle_refresh_view, fidata);
 
index 3135889..f17200f 100644 (file)
@@ -211,7 +211,13 @@ gtkhtml_write (TnyStream *self, const char *buffer, size_t n)
                        n = priv->max_size - priv->current_size;
        }
 
+       if (!g_main_context_is_owner (NULL))
+               gdk_threads_enter ();
+
        gtk_html_stream_write (priv->stream, buffer, n);
+
+       if (!g_main_context_is_owner (NULL))
+               gdk_threads_leave ();
        priv->current_size += n;
 
        return n; /* hmmm */
@@ -233,7 +239,14 @@ gtkhtml_close (TnyStream *self)
        priv = MODEST_TNY_STREAM_GTKHTML_GET_PRIVATE(self);
        
        if (priv->html && GTK_WIDGET_VISIBLE (priv->html)) {
+               if (!g_main_context_is_owner (NULL))
+                       gdk_threads_enter ();
+
                gtk_html_stream_close   (priv->stream, GTK_HTML_STREAM_OK);
+
+               if (!g_main_context_is_owner (NULL))
+                       gdk_threads_leave ();
+
        }
        priv->stream = NULL;
        if (priv->html && priv->stop_streams_id > 0) {