[SCM] LibreOffice packaging repository branch, ubuntu-precise-3.5, updated. libreoffice_3.5.2_rc2-1-164-g10e447e
The following commit has been merged in the ubuntu-precise-3.5 branch:
commit 68e06a61d41dc5caf4f68b773316c51fd7dab6cc
Author: Bjoern Michaelsen <bjoern.michaelsen@canonical.com>
Date: Tue Jan 8 19:26:05 2013 +0100
lp#1097370: multi-threaded XIOError segv
diff --git a/changelog b/changelog
index 0992f0e..2cb3145 100644
--- a/changelog
+++ b/changelog
@@ -2,6 +2,7 @@ libreoffice (1:3.5.7-0ubuntu3) UNRELEASED; urgency=low
* backport SdModule::GetSdOptions: Process /usr/lib64/libreoffice/program/soffice.bin was killed by signal 11 (SIGSEGV) (LP: #1097323)
* backport crash when scrolling in multiselection in slide sorter (LP: #1097360)
+ * backport multi-threaded XIOError segv (LP: #1097370)
-- Bjoern Michaelsen <bjoern.michaelsen@canonical.com> Tue, 08 Jan 2013 17:09:36 +0100
diff --git a/patches/lp-1097370-rhbz-855541-XIOError-handler-multithread-wo.diff b/patches/lp-1097370-rhbz-855541-XIOError-handler-multithread-wo.diff
new file mode 100644
index 0000000..ea38b32
--- /dev/null
+++ b/patches/lp-1097370-rhbz-855541-XIOError-handler-multithread-wo.diff
@@ -0,0 +1,74 @@
+From d32f17fd4826fb0cc703cef7d208f32f17c7a76c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
+Date: Wed, 12 Sep 2012 13:44:09 +0100
+Subject: [PATCH] Resolves: rhbz#855541 XIOError handler multithread woes
+
+We have two threads using X, on an XIOError both
+threads call their XIOError handlers and two
+calls to exit trample all over eachother.
+
+Change-Id: I20defc6f84cc6ea2372a0d6c979e8078fe920a88
+---
+ vcl/unx/generic/app/saldata.cxx | 6 ++++++
+ vcl/unx/gtk/app/gtkdata.cxx | 14 ++++++++++++++
+ 2 files changed, 20 insertions(+)
+
+diff --git a/vcl/unx/generic/app/saldata.cxx b/vcl/unx/generic/app/saldata.cxx
+index 306fc4e..1629d47 100644
+--- a/vcl/unx/generic/app/saldata.cxx
++++ b/vcl/unx/generic/app/saldata.cxx
+@@ -332,6 +332,12 @@ int X11SalData::XErrorHdl( Display *pDisplay, XErrorEvent *pEvent )
+
+ int X11SalData::XIOErrorHdl( Display * )
+ {
++ if (::osl::Thread::getCurrentIdentifier() != Application::GetMainThreadIdentifier())
++ {
++ pthread_exit(NULL);
++ return 0;
++ }
++
+ /* #106197# hack: until a real shutdown procedure exists
+ * _exit ASAP
+ */
+diff --git a/vcl/unx/gtk/app/gtkdata.cxx b/vcl/unx/gtk/app/gtkdata.cxx
+index fbc3b22..3fb09b7 100644
+--- a/vcl/unx/gtk/app/gtkdata.cxx
++++ b/vcl/unx/gtk/app/gtkdata.cxx
+@@ -535,6 +535,18 @@ GtkData::GtkData( SalInstance *pInstance )
+ m_aDispatchCondition = osl_createCondition();
+ }
+
++XIOErrorHandler aOrigXIOErrorHandler = NULL;
++
++int XIOErrorHdl(Display *pDisplay)
++{
++ if (::osl::Thread::getCurrentIdentifier() != Application::GetMainThreadIdentifier())
++ {
++ pthread_exit(NULL);
++ return 0;
++ }
++ return aOrigXIOErrorHandler ? aOrigXIOErrorHandler(pDisplay) : 0;
++}
++
+ GtkData::~GtkData()
+ {
+ Yield( true, true );
+@@ -554,6 +566,7 @@ GtkData::~GtkData()
+ osl_destroyCondition( m_aDispatchCondition );
+ osl_releaseMutex( m_aDispatchMutex );
+ osl_destroyMutex( m_aDispatchMutex );
++ XSetIOErrorHandler(aOrigXIOErrorHandler);
+ }
+
+ void GtkData::Yield( bool bWait, bool bHandleAllCurrentEvents )
+@@ -668,6 +681,7 @@ void GtkData::Init()
+ // init gtk/gdk
+ gtk_init_check( &nParams, &pCmdLineAry );
+ gdk_error_trap_push();
++ aOrigXIOErrorHandler = XSetIOErrorHandler(XIOErrorHdl);
+
+ for (i = 0; i < nParams; i++ )
+ g_free( pCmdLineAry[i] );
+--
+1.7.10.4
+
diff --git a/patches/series b/patches/series
index b36211d..7d30db4 100644
--- a/patches/series
+++ b/patches/series
@@ -37,3 +37,4 @@ lp-904212-add-missing-mimetypes-to-impress.desktop.diff
improve-faux-bold-font.diff
lp-1097323-rhbz-806663-SlideshowImpl-can-outlive-SdMod.diff
lp-1097560-rhbz-842292-crash-in-calling-callback-whose.diff
+lp-1097370-rhbz-855541-XIOError-handler-multithread-wo.diff
--
LibreOffice packaging repository
Reply to: