[libreoffice/f15/master] Resolves: rhbz#655686 get order of shutdown correct
Caolan McNamara
caolanm at fedoraproject.org
Tue Apr 5 10:28:37 UTC 2011
commit c05da25401e6004995582c420f322eab0c92732a
Author: Caolán McNamara <caolanm at redhat.com>
Date: Tue Apr 5 11:28:33 2011 +0100
Resolves: rhbz#655686 get order of shutdown correct
...lated-rhbz-655686-get-order-of-shutdown-c.patch | 514 ++++++++++++++++++++
libreoffice.spec | 11 +-
2 files changed, 522 insertions(+), 3 deletions(-)
---
diff --git a/0001-helgrind-Related-rhbz-655686-get-order-of-shutdown-c.patch b/0001-helgrind-Related-rhbz-655686-get-order-of-shutdown-c.patch
new file mode 100644
index 0000000..814a854
--- /dev/null
+++ b/0001-helgrind-Related-rhbz-655686-get-order-of-shutdown-c.patch
@@ -0,0 +1,514 @@
+From 47ea5b58c92777d8d35376b64a1c075fecb8b104 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm at redhat.com>
+Date: Tue, 5 Apr 2011 11:19:35 +0100
+Subject: [PATCH] helgrind: Related: rhbz#655686 get order of shutdown correct
+
+---
+ sal/rtl/source/alloc_arena.c | 44 +++-----------
+ sal/rtl/source/alloc_cache.c | 44 +++-----------
+ sal/rtl/source/alloc_fini.cxx | 81 +++++++++++++++++++-------
+ sal/rtl/source/alloc_global.c | 131 +++++++++++++++++------------------------
+ sal/rtl/source/makefile.mk | 15 +----
+ 5 files changed, 135 insertions(+), 180 deletions(-)
+
+diff --git a/sal/rtl/source/alloc_arena.c b/sal/rtl/source/alloc_arena.c
+index 27ac970..c2294d8 100644
+--- a/sal/rtl/source/alloc_arena.c
++++ b/sal/rtl/source/alloc_arena.c
+@@ -102,13 +102,6 @@ rtl_machdep_pagesize (void);
+ rtl_arena_type * gp_default_arena = 0;
+
+
+-/** rtl_arena_init()
+- * @internal
+- */
+-static int
+-rtl_arena_init (void);
+-
+-
+ /* ================================================================= */
+
+ /** rtl_arena_segment_constructor()
+@@ -921,6 +914,8 @@ rtl_arena_deactivate (
+ *
+ * ================================================================= */
+
++extern void ensureArenaSingleton();
++
+ /** rtl_arena_create()
+ */
+ rtl_arena_type *
+@@ -973,7 +968,8 @@ try_alloc:
+ }
+ else if (gp_arena_arena == 0)
+ {
+- if (rtl_arena_init())
++ ensureArenaSingleton();
++ if (gp_arena_arena)
+ {
+ /* try again */
+ goto try_alloc;
+@@ -1279,8 +1275,8 @@ rtl_machdep_pagesize (void)
+ *
+ * ================================================================= */
+
+-static void
+-rtl_arena_once_init (void)
++void
++rtl_arena_init (void)
+ {
+ {
+ /* list of arenas */
+@@ -1342,36 +1338,11 @@ rtl_arena_once_init (void)
+ );
+ OSL_ASSERT(gp_arena_arena != 0);
+ }
+-}
+-
+-static int
+-rtl_arena_init (void)
+-{
+- static sal_once_type g_once = SAL_ONCE_INIT;
+- SAL_ONCE(&g_once, rtl_arena_once_init);
+- return (gp_arena_arena != 0);
++ OSL_TRACE("rtl_arena_init completed");
+ }
+
+ /* ================================================================= */
+
+-/*
+- Issue http://udk.openoffice.org/issues/show_bug.cgi?id=92388
+-
+- Mac OS X does not seem to support "__cxa__atexit", thus leading
+- to the situation that "__attribute__((destructor))__" functions
+- (in particular "rtl_{memory|cache|arena}_fini") become called
+- _before_ global C++ object d'tors.
+-
+- Delegated the call to "rtl_arena_fini()" into a dummy C++ object,
+- see alloc_fini.cxx .
+-*/
+-#if defined(__GNUC__) && !defined(MACOSX)
+-static void rtl_arena_fini (void) __attribute__((destructor));
+-#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+-#pragma fini(rtl_arena_fini)
+-static void rtl_arena_fini (void);
+-#endif /* __GNUC__ || __SUNPRO_C */
+-
+ void
+ rtl_arena_fini (void)
+ {
+@@ -1394,6 +1365,7 @@ rtl_arena_fini (void)
+ }
+ RTL_MEMORY_LOCK_RELEASE(&(g_arena_list.m_lock));
+ }
++ OSL_TRACE("rtl_arena_fini completed");
+ }
+
+ /* ================================================================= */
+diff --git a/sal/rtl/source/alloc_cache.c b/sal/rtl/source/alloc_cache.c
+index 06de201..ebf799e 100644
+--- a/sal/rtl/source/alloc_cache.c
++++ b/sal/rtl/source/alloc_cache.c
+@@ -99,13 +99,6 @@ static rtl_cache_type * gp_cache_slab_cache = 0;
+ static rtl_cache_type * gp_cache_bufctl_cache = 0;
+
+
+-/** rtl_cache_init()
+- * @internal
+- */
+-static int
+-rtl_cache_init (void);
+-
+-
+ /* ================================================================= */
+
+ /** RTL_CACHE_HASH_INDEX()
+@@ -1119,6 +1112,8 @@ rtl_cache_deactivate (
+ *
+ * ================================================================= */
+
++extern void ensureCacheSingleton();
++
+ /** rtl_cache_create()
+ */
+ rtl_cache_type *
+@@ -1176,7 +1171,8 @@ try_alloc:
+ }
+ else if (gp_cache_arena == 0)
+ {
+- if (rtl_cache_init())
++ ensureCacheSingleton();
++ if (gp_cache_arena)
+ {
+ /* try again */
+ goto try_alloc;
+@@ -1583,8 +1579,8 @@ rtl_cache_wsupdate_all (void * arg)
+ *
+ * ================================================================= */
+
+-static void
+-rtl_cache_once_init (void)
++void
++rtl_cache_init (void)
+ {
+ {
+ /* list of caches */
+@@ -1680,36 +1676,11 @@ rtl_cache_once_init (void)
+ }
+
+ rtl_cache_wsupdate_init();
+-}
+-
+-static int
+-rtl_cache_init (void)
+-{
+- static sal_once_type g_once = SAL_ONCE_INIT;
+- SAL_ONCE(&g_once, rtl_cache_once_init);
+- return (gp_cache_arena != 0);
++ OSL_TRACE("rtl_cache_init completed");
+ }
+
+ /* ================================================================= */
+
+-/*
+- Issue http://udk.openoffice.org/issues/show_bug.cgi?id=92388
+-
+- Mac OS X does not seem to support "__cxa__atexit", thus leading
+- to the situation that "__attribute__((destructor))__" functions
+- (in particular "rtl_{memory|cache|arena}_fini") become called
+- _before_ global C++ object d'tors.
+-
+- Delegated the call to "rtl_cache_fini()" into a dummy C++ object,
+- see alloc_fini.cxx .
+-*/
+-#if defined(__GNUC__) && !defined(MACOSX)
+-static void rtl_cache_fini (void) __attribute__((destructor));
+-#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+-#pragma fini(rtl_cache_fini)
+-static void rtl_cache_fini (void);
+-#endif /* __GNUC__ || __SUNPRO_C */
+-
+ void
+ rtl_cache_fini (void)
+ {
+@@ -1765,6 +1736,7 @@ rtl_cache_fini (void)
+ }
+ RTL_MEMORY_LOCK_RELEASE(&(g_cache_list.m_lock));
+ }
++ OSL_TRACE("rtl_cache_fini completed");
+ }
+
+ /* ================================================================= */
+diff --git a/sal/rtl/source/alloc_fini.cxx b/sal/rtl/source/alloc_fini.cxx
+index 5bc174e..f079676 100644
+--- a/sal/rtl/source/alloc_fini.cxx
++++ b/sal/rtl/source/alloc_fini.cxx
+@@ -26,33 +26,72 @@
+ *
+ ************************************************************************/
+
+-/*
+- Issue http://udk.openoffice.org/issues/show_bug.cgi?id=92388
+-
+- Mac OS X does not seem to support "__cxa__atexit", thus leading
+- to the situation that "__attribute__((destructor))__" functions
+- (in particular "rtl_{memory|cache|arena}_fini") become called
+- _before_ global C++ object d'tors.
+-
+- Using a C++ dummy object instead.
+-*/
++#include <rtl/instance.hxx>
+
+ extern "C" void rtl_memory_fini (void);
+-extern "C" void rtl_cache_fini (void);
+-extern "C" void rtl_arena_fini (void);
+-
+-struct RTL_Alloc_Fini
++extern "C" void rtl_memory_init (void);
++namespace
++{
++ struct rtlMemorySingleton
++ {
++ rtlMemorySingleton()
++ {
++ rtl_memory_init();
++ }
++ ~rtlMemorySingleton()
++ {
++ rtl_memory_fini();
++ }
++ };
++ class theMemorySingleton : public rtl::Static<rtlMemorySingleton, theMemorySingleton>{};
++}
++extern "C" void ensureMemorySingleton()
+ {
+- ~RTL_Alloc_Fini() ;
+-};
++ theMemorySingleton::get();
++}
+
+-RTL_Alloc_Fini::~RTL_Alloc_Fini()
++extern "C" void rtl_cache_fini (void);
++extern "C" void rtl_cache_init (void);
++namespace
++{
++ struct rtlCacheSingleton
++ {
++ rtlCacheSingleton()
++ {
++ rtl_cache_init();
++ }
++ ~rtlCacheSingleton()
++ {
++ rtl_cache_fini();
++ }
++ };
++ class theCacheSingleton : public rtl::Static<rtlCacheSingleton, theCacheSingleton>{};
++}
++extern "C" void ensureCacheSingleton()
+ {
+- rtl_memory_fini();
+- rtl_cache_fini();
+- rtl_arena_fini();
++ theCacheSingleton::get();
+ }
+
+-static RTL_Alloc_Fini g_RTL_Alloc_Fini;
++extern "C" void rtl_arena_fini (void);
++extern "C" void rtl_arena_init (void);
++namespace
++{
++ struct rtlArenaSingleton
++ {
++ rtlArenaSingleton()
++ {
++ rtl_arena_init();
++ }
++ ~rtlArenaSingleton()
++ {
++ rtl_arena_fini();
++ }
++ };
++ class theArenaSingleton : public rtl::Static<rtlArenaSingleton, theArenaSingleton>{};
++}
++extern "C" void ensureArenaSingleton()
++{
++ theArenaSingleton::get();
++}
+
+ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+diff --git a/sal/rtl/source/alloc_global.c b/sal/rtl/source/alloc_global.c
+index 70504ac..fb95e83 100644
+--- a/sal/rtl/source/alloc_global.c
++++ b/sal/rtl/source/alloc_global.c
+@@ -29,6 +29,7 @@
+ #include "alloc_impl.h"
+ #include "rtl/alloc.h"
+ #include <sal/macros.h>
++#include <osl/diagnose.h>
+
+ #include <string.h>
+ #include <stdio.h>
+@@ -66,7 +67,6 @@ static void determine_alloc_mode(void)
+
+ #include "internal/once.h"
+ #include "sal/macros.h"
+-#include "osl/diagnose.h"
+
+ /* ================================================================= *
+ *
+@@ -108,60 +108,7 @@ static rtl_cache_type * g_alloc_table[RTL_MEMORY_CACHED_LIMIT >> RTL_MEMALIGN_SH
+
+ static rtl_arena_type * gp_alloc_arena = 0;
+
+-/* ================================================================= *
+- *
+- * custom allocator initialization / finalization.
+- *
+- * ================================================================= */
+-
+-static void
+-rtl_memory_once_init (void)
+-{
+- {
+- /* global memory arena */
+- OSL_ASSERT(gp_alloc_arena == 0);
+-
+- gp_alloc_arena = rtl_arena_create (
+- "rtl_alloc_arena",
+- 2048, /* quantum */
+- 0, /* w/o quantum caching */
+- 0, /* default source */
+- rtl_arena_alloc,
+- rtl_arena_free,
+- 0 /* flags */
+- );
+- OSL_ASSERT(gp_alloc_arena != 0);
+- }
+- {
+- sal_Size size;
+- int i, n = RTL_MEMORY_CACHED_SIZES;
+-
+- for (i = 0; i < n; i++)
+- {
+- char name[RTL_CACHE_NAME_LENGTH + 1];
+- (void) snprintf (name, sizeof(name), "rtl_alloc_%lu", g_alloc_sizes[i]);
+- g_alloc_caches[i] = rtl_cache_create (name, g_alloc_sizes[i], 0, NULL, NULL, NULL, NULL, NULL, 0);
+- }
+-
+- size = RTL_MEMALIGN;
+- for (i = 0; i < n; i++)
+- {
+- while (size <= g_alloc_sizes[i])
+- {
+- g_alloc_table[(size - 1) >> RTL_MEMALIGN_SHIFT] = g_alloc_caches[i];
+- size += RTL_MEMALIGN;
+- }
+- }
+- }
+-}
+-
+-static int
+-rtl_memory_init (void)
+-{
+- static sal_once_type g_once = SAL_ONCE_INIT;
+- SAL_ONCE(&g_once, rtl_memory_once_init);
+- return (gp_alloc_arena != 0);
+-}
++extern void ensureMemorySingleton();
+
+ /* ================================================================= *
+ *
+@@ -198,7 +145,8 @@ try_alloc:
+ }
+ else if (gp_alloc_arena == 0)
+ {
+- if (rtl_memory_init())
++ ensureMemorySingleton();
++ if (gp_alloc_arena)
+ {
+ /* try again */
+ goto try_alloc;
+@@ -256,28 +204,58 @@ void * SAL_CALL rtl_reallocateMemory_CUSTOM (void * p, sal_Size n) SAL_THROW_EXT
+
+ #endif
+
++/* ================================================================= *
++ *
++ * custom allocator initialization / finalization.
++ *
++ * ================================================================= */
++
++void rtl_memory_init (void)
++{
++#if !defined(FORCE_SYSALLOC)
++ {
++ /* global memory arena */
++ OSL_ASSERT(gp_alloc_arena == 0);
++
++ gp_alloc_arena = rtl_arena_create (
++ "rtl_alloc_arena",
++ 2048, /* quantum */
++ 0, /* w/o quantum caching */
++ 0, /* default source */
++ rtl_arena_alloc,
++ rtl_arena_free,
++ 0 /* flags */
++ );
++ OSL_ASSERT(gp_alloc_arena != 0);
++ }
++ {
++ sal_Size size;
++ int i, n = RTL_MEMORY_CACHED_SIZES;
++
++ for (i = 0; i < n; i++)
++ {
++ char name[RTL_CACHE_NAME_LENGTH + 1];
++ (void) snprintf (name, sizeof(name), "rtl_alloc_%lu", g_alloc_sizes[i]);
++ g_alloc_caches[i] = rtl_cache_create (name, g_alloc_sizes[i], 0, NULL, NULL, NULL, NULL, NULL, 0);
++ }
++
++ size = RTL_MEMALIGN;
++ for (i = 0; i < n; i++)
++ {
++ while (size <= g_alloc_sizes[i])
++ {
++ g_alloc_table[(size - 1) >> RTL_MEMALIGN_SHIFT] = g_alloc_caches[i];
++ size += RTL_MEMALIGN;
++ }
++ }
++ }
++#endif
++ OSL_TRACE("rtl_memory_init completed");
++}
++
+ /* ================================================================= */
+
+-/*
+- Issue http://udk.openoffice.org/issues/show_bug.cgi?id=92388
+-
+- Mac OS X does not seem to support "__cxa__atexit", thus leading
+- to the situation that "__attribute__((destructor))__" functions
+- (in particular "rtl_memory_fini") become called _before_ global
+- C++ object d'tors.
+-
+- Delegated the call to "rtl_memory_fini" into a dummy C++ object,
+- see memory_fini.cxx .
+-*/
+-#if defined(__GNUC__) && !defined(MACOSX) && !defined(AIX)
+-static void rtl_memory_fini (void) __attribute__((destructor));
+-#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+-#pragma fini(rtl_memory_fini)
+-static void rtl_memory_fini (void);
+-#endif /* __GNUC__ || __SUNPRO_C */
+-
+-void
+-rtl_memory_fini (void)
++void rtl_memory_fini (void)
+ {
+ #if !defined(FORCE_SYSALLOC)
+ int i, n;
+@@ -302,6 +280,7 @@ rtl_memory_fini (void)
+ gp_alloc_arena = 0;
+ }
+ #endif
++ OSL_TRACE("rtl_memory_fini completed");
+ }
+
+ /* ================================================================= *
+diff --git a/sal/rtl/source/makefile.mk b/sal/rtl/source/makefile.mk
+index 67ae7f8..9c3921d 100644
+--- a/sal/rtl/source/makefile.mk
++++ b/sal/rtl/source/makefile.mk
+@@ -100,12 +100,8 @@ SLOFILES= \
+ $(SLO)$/math.obj \
+ $(SLO)$/alloc_global.obj\
+ $(SLO)$/alloc_cache.obj \
+- $(SLO)$/alloc_arena.obj
+-
+-.IF "$(OS)"=="MACOSX" || "$(OS)"=="AIX"
+-SLOFILES+=$(SLO)$/alloc_fini.obj
+-.ENDIF
+-
++ $(SLO)$/alloc_arena.obj \
++ $(SLO)$/alloc_fini.obj
+
+ OBJFILES= \
+ $(OBJ)$/memory.obj \
+@@ -132,11 +128,8 @@ OBJFILES= \
+ $(OBJ)$/math.obj \
+ $(OBJ)$/alloc_global.obj\
+ $(OBJ)$/alloc_cache.obj \
+- $(OBJ)$/alloc_arena.obj
+-
+-.IF "$(OS)"=="MACOSX" || "$(OS)"=="AIX"
+-OBJFILES+=$(OBJ)$/alloc_fini.obj
+-.ENDIF
++ $(OBJ)$/alloc_arena.obj \
++ $(OBJ)$/alloc_fini.obj
+
+
+ APP1TARGET=gen_makefile
+--
+1.7.4.1
+
diff --git a/libreoffice.spec b/libreoffice.spec
index 3d446e9..1847dd0 100644
--- a/libreoffice.spec
+++ b/libreoffice.spec
@@ -29,7 +29,7 @@ Summary: Free Software Productivity Suite
Name: libreoffice
Epoch: 1
Version: 3.3.2.2
-Release: 5%{?dist}
+Release: 6%{?dist}
License: LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and (CDDL or GPLv2) and Public Domain
Group: Applications/Productivity
URL: http://www.documentfoundation.org/develop
@@ -135,6 +135,7 @@ Patch46: mdds.do-not-insert-new-node.patch
Patch47: 0001-Resolves-rhbz-684580-X-and-strike-through-escapes-ra.patch
Patch48: 0001-set-mime-types-on-flat-xml-filters.patch
Patch49: 0001-add-flat-xml-types-to-.desktop-files-etc.patch
+Patch50: 0001-helgrind-Related-rhbz-655686-get-order-of-shutdown-c.patch
%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
%define instdir %{_libdir}
@@ -782,9 +783,10 @@ mv -f redhat.soc extras/source/palettes/standard.soc
%patch42 -p1 -b .Cut-Gordian-Knot-of-who-owns-the-font-options.patch
%patch43 -p1 -b .beware-of-invalidated-iterator.patch
%patch44 -p1 -b .rhbz680766.fix-mdds-crash.patch
-%patch47 -p1 -b .rhbz-684580-X-and-strike-through-escapes-ra.patch
+%patch47 -p1 -b .rhbz684580-X-and-strike-through-escapes-ra.patch
%patch48 -p1 -b .set-mime-types-on-flat-xml-filters.patch
%patch49 -p1 -b .add-flat-xml-types-to-.desktop-files-etc.patch
+%patch50 -p1 -b .rhbz655686-get-order-of-shutdown-c.patch
touch scripting/source/pyprov/delzip
touch scripting/util/provider/beanshell/delzip
@@ -2134,9 +2136,12 @@ update-desktop-database %{_datadir}/applications &> /dev/null || :
%{basisinstdir}/program/kde-open-url
%changelog
+* Tue Apr 05 2011 Caolán McNamara <caolanm at redhat.com> 3.3.2.2-6
+- Resolves: rhbz#655686 get order of shutdown correct
+
* Wed Mar 30 2011 Caolán McNamara <caolanm at redhat.com> 3.3.2.2-5
- Add application/vnd.oasis.opendocument.text-flat-xml, etc. to
- .desktop files for mcelp
+ .desktop files for mcepl
* Tue Mar 29 2011 Caolán McNamara <caolanm at redhat.com> 3.3.2.2-4
- Resolves: rhbz#684580 improve X and / strike-through
More information about the scm-commits
mailing list