Resolves: rhbz#655686 get order of shutdown correct

f41
Caolán McNamara 14 years ago
parent d9c44f1f96
commit 239956c551

@ -0,0 +1,514 @@
From 47ea5b58c92777d8d35376b64a1c075fecb8b104 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@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

@ -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@redhat.com> 3.3.2.2-6
- Resolves: rhbz#655686 get order of shutdown correct
* Wed Mar 30 2011 Caolán McNamara <caolanm@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@redhat.com> 3.3.2.2-4
- Resolves: rhbz#684580 improve X and / strike-through

Loading…
Cancel
Save