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?= +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 + + 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{}; ++} ++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{}; ++} ++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{}; ++} ++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 ++#include + + #include + #include +@@ -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 3.3.2.2-6 +- Resolves: rhbz#655686 get order of shutdown correct + * Wed Mar 30 2011 Caolán McNamara 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 3.3.2.2-4 - Resolves: rhbz#684580 improve X and / strike-through