From 87db0f592b3ffee3043b4e701be8c8c0132e3520 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Mon, 18 Dec 2006 15:26:40 +0000 Subject: Use an specific lock for FontConfig. Hopefully it fixes some crashes 2006-12-18 Carlos Garcia Campos * backend/ev-document.[ch]: (ev_document_get_fc_mutex), (ev_document_fc_mutex_lock), (ev_document_fc_mutex_unlock): * pdf/ev-poppler.cc: (make_thumbnail_for_size): * shell/ev-jobs.c: (ev_job_render_run), (ev_job_fonts_run): * shell/ev-view.c: (draw_loading_text): * shell/ev-window.c: (ev_window_cmd_file_properties): Use an specific lock for FontConfig. Hopefully it fixes some crashes related to using FontConfig from different threads. --- (limited to 'backend') diff --git a/backend/ev-document.c b/backend/ev-document.c index 94647c6..a951bfa 100644 --- a/backend/ev-document.c +++ b/backend/ev-document.c @@ -28,6 +28,7 @@ static void ev_document_class_init (gpointer g_class); GMutex *ev_doc_mutex = NULL; +GMutex *ev_fc_mutex = NULL; #define LOG(x) GType @@ -89,7 +90,26 @@ ev_document_doc_mutex_unlock (void) g_mutex_unlock (ev_document_get_doc_mutex ()); } +GMutex * +ev_document_get_fc_mutex (void) +{ + if (ev_fc_mutex == NULL) { + ev_fc_mutex = g_mutex_new (); + } + return ev_fc_mutex; +} +void +ev_document_fc_mutex_lock (void) +{ + g_mutex_lock (ev_document_get_fc_mutex ()); +} + +void +ev_document_fc_mutex_unlock (void) +{ + g_mutex_unlock (ev_document_get_fc_mutex ()); +} gboolean ev_document_load (EvDocument *document, diff --git a/backend/ev-document.h b/backend/ev-document.h index 0da5fc7..828ca25 100644 --- a/backend/ev-document.h +++ b/backend/ev-document.h @@ -97,10 +97,17 @@ struct _EvDocumentIface GType ev_document_get_type (void); GQuark ev_document_error_quark (void); -GMutex *ev_document_get_doc_mutex (void); -void ev_document_doc_mutex_lock (void); + +/* Document mutex */ +GMutex *ev_document_get_doc_mutex (void); +void ev_document_doc_mutex_lock (void); void ev_document_doc_mutex_unlock (void); +/* FontConfig mutex */ +GMutex *ev_document_fc_doc_mutex (void); +void ev_document_fc_mutex_lock (void); +void ev_document_fc_mutex_unlock (void); + EvDocumentInfo *ev_document_get_info (EvDocument *document); gboolean ev_document_load (EvDocument *document, const char *uri, -- cgit v0.9.1