[openoffice.org/f14/master] backport to 3.3.0

Caolan McNamara caolanm at fedoraproject.org
Tue Apr 5 15:32:32 UTC 2011


commit bb8e06b79db8aea626de00382601796faa71caad
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Apr 5 16:32:27 2011 +0100

    backport to 3.3.0

 ...lated-rhbz-655686-get-order-of-shutdown-c.patch |  404 +++++++-------------
 openoffice.org.spec                                |    2 +-
 2 files changed, 149 insertions(+), 257 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
index 814a854..3d82313 100644
--- a/0001-helgrind-Related-rhbz-655686-get-order-of-shutdown-c.patch
+++ b/0001-helgrind-Related-rhbz-655686-get-order-of-shutdown-c.patch
@@ -15,7 +15,7 @@ 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);
+@@ -110,13 +110,6 @@
  rtl_arena_type * gp_default_arena = 0;
  
  
@@ -29,7 +29,7 @@ index 27ac970..c2294d8 100644
  /* ================================================================= */
  
  /** rtl_arena_segment_constructor()
-@@ -921,6 +914,8 @@ rtl_arena_deactivate (
+@@ -944,6 +937,8 @@
   *
   * ================================================================= */
  
@@ -38,17 +38,17 @@ index 27ac970..c2294d8 100644
  /** rtl_arena_create()
   */
  rtl_arena_type *
-@@ -973,7 +968,8 @@ try_alloc:
-     }
-     else if (gp_arena_arena == 0)
-     {
--        if (rtl_arena_init())
+@@ -994,7 +989,8 @@
+ 	}
+ 	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)
+ 		{
+ 			/* try again */
+ 			goto try_alloc;
+@@ -1290,8 +1286,8 @@
   *
   * ================================================================= */
  
@@ -57,37 +57,26 @@ index 27ac970..c2294d8 100644
 +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);
+ 	{
+ 		/* list of arenas */
+@@ -1350,25 +1346,9 @@
+ 		);
+ 		OSL_ASSERT(gp_arena_arena != 0);
+ 	}
 +    OSL_TRACE("rtl_arena_init completed");
  }
  
- /* ================================================================= */
- 
--/*
--  Issue http://udk.openoffice.org/issues/show_bug.cgi?id=92388
+-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);
+-}
 -
--  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)
+-#if defined(__GNUC__)
 -static void rtl_arena_fini (void) __attribute__((destructor));
 -#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
 -#pragma fini(rtl_arena_fini)
@@ -97,10 +86,10 @@ index 27ac970..c2294d8 100644
  void
  rtl_arena_fini (void)
  {
-@@ -1394,6 +1365,7 @@ rtl_arena_fini (void)
-         }
-         RTL_MEMORY_LOCK_RELEASE(&(g_arena_list.m_lock));
-     }
+@@ -1391,6 +1371,7 @@
+ 		}
+ 		RTL_MEMORY_LOCK_RELEASE(&(g_arena_list.m_lock));
+ 	}
 +    OSL_TRACE("rtl_arena_fini completed");
  }
  
@@ -109,7 +98,7 @@ 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;
+@@ -98,13 +98,6 @@
  static rtl_cache_type * gp_cache_bufctl_cache = 0;
  
  
@@ -123,7 +112,7 @@ index 06de201..ebf799e 100644
  /* ================================================================= */
  
  /** RTL_CACHE_HASH_INDEX()
-@@ -1119,6 +1112,8 @@ rtl_cache_deactivate (
+@@ -1098,6 +1091,8 @@
   *
   * ================================================================= */
  
@@ -132,17 +121,17 @@ index 06de201..ebf799e 100644
  /** rtl_cache_create()
   */
  rtl_cache_type *
-@@ -1176,7 +1171,8 @@ try_alloc:
-     }
-     else if (gp_cache_arena == 0)
-     {
--        if (rtl_cache_init())
+@@ -1153,7 +1148,8 @@
+ 	}
+ 	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)
+ 		{
+ 			/* try again */
+ 			goto try_alloc;
+@@ -1551,8 +1547,8 @@
   *
   * ================================================================= */
  
@@ -151,37 +140,26 @@ index 06de201..ebf799e 100644
 +void
 +rtl_cache_init (void)
  {
-     {
-         /* list of caches */
-@@ -1680,36 +1676,11 @@ rtl_cache_once_init (void)
-     }
+ 	{
+ 		/* list of caches */
+@@ -1645,25 +1641,11 @@
+ 	}
  
-     rtl_cache_wsupdate_init();
+ 	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);
+-	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)
+-#if defined(__GNUC__)
 -static void rtl_cache_fini (void) __attribute__((destructor));
 -#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
 -#pragma fini(rtl_cache_fini)
@@ -191,39 +169,38 @@ index 06de201..ebf799e 100644
  void
  rtl_cache_fini (void)
  {
-@@ -1765,6 +1736,7 @@ rtl_cache_fini (void)
-         }
-         RTL_MEMORY_LOCK_RELEASE(&(g_cache_list.m_lock));
-     }
+@@ -1716,6 +1698,7 @@
+ 		}
+ 		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
+diff --git a/sal/rtl/source/memory_fini.cxx b/sal/rtl/source/memory_fini.cxx
 index 5bc174e..f079676 100644
---- a/sal/rtl/source/alloc_fini.cxx
-+++ b/sal/rtl/source/alloc_fini.cxx
-@@ -26,33 +26,72 @@
+--- a/sal/rtl/source/memory_fini.cxx
++++ b/sal/rtl/source/memory_fini.cxx
+@@ -25,30 +25,97 @@
   *
   ************************************************************************/
  
+-
 -/*
 -  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.
+-  (in particular "rtl_memory_fini") become called _before_ global 
+-  C++ object d'tors.
 -
 -  Using a C++ dummy object instead.
 -*/
+-
+-#include <stdio.h>
 +#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
 +{
@@ -238,16 +215,14 @@ index 5bc174e..f079676 100644
 +            rtl_memory_fini();
 +        }
 +    };
-+    class theMemorySingleton : public rtl::Static<rtlMemorySingleton, theMemorySingleton>{};
++    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
@@ -263,17 +238,20 @@ index 5bc174e..f079676 100644
 +            rtl_cache_fini();
 +        }
 +    };
-+    class theCacheSingleton : public rtl::Static<rtlCacheSingleton, theCacheSingleton>{};
++    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;
+-struct RTL_Memory_Fini {
+-  ~RTL_Memory_Fini() ;
+-};
+-
+-RTL_Memory_Fini::~RTL_Memory_Fini() {
+-  rtl_memory_fini();
 +extern "C" void rtl_arena_fini (void);
 +extern "C" void rtl_arena_init (void);
 +namespace
@@ -289,159 +267,70 @@ index 5bc174e..f079676 100644
 +            rtl_arena_fini();
 +        }
 +    };
-+    class theArenaSingleton : public rtl::Static<rtlArenaSingleton, theArenaSingleton>{};
++    class theArenaSingleton
++        : public rtl::Static<rtlArenaSingleton, theArenaSingleton>{};
 +}
 +extern "C" void ensureArenaSingleton()
 +{
 +    theArenaSingleton::get();
+ }
+ 
++extern "C" void rtl_locale_fini (void);
++extern "C" void rtl_locale_init (void);
++namespace
++{
++    struct rtlLocaleSingleton
++    {
++        rtlLocaleSingleton()
++        {
++            rtl_locale_init();
++        }
++        ~rtlLocaleSingleton()
++        {
++            rtl_locale_fini();
++        }
++    };
++    class theLocaleSingleton
++        : public rtl::Static<rtlLocaleSingleton, theLocaleSingleton>{};
++}
++extern "C" void ensureLocaleSingleton()
++{
++    theLocaleSingleton::get();
 +}
  
- /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+-static RTL_Memory_Fini rtl_Memory_Fini;
 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"
- 
- /* ================================================================= *
+@@ -95,8 +95,10 @@
   *
-@@ -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;
--            }
--        }
--    }
++extern void ensureMemorySingleton();
++
++void
++rtl_memory_init (void)
+ {
+ 	{
+ 		/* global memory arena */
+@@ -134,36 +136,11 @@
+ 			}
+ 		}
+ 	}
 -}
 -
 -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
+-	static sal_once_type g_once = SAL_ONCE_INIT;
+-	SAL_ONCE(&g_once, rtl_memory_once_init);
+-	return (gp_alloc_arena != 0);
 +    OSL_TRACE("rtl_memory_init completed");
-+}
-+
+ }
+ 
  /* ================================================================= */
  
 -/*
@@ -449,66 +338,69 @@ index 70504ac..fb95e83 100644
 -
 -  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
+-  (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)
+-#if defined(__GNUC__) && !defined(MACOSX)
 -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)
+ 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
+@@ -188,6 +165,7 @@
+ 		rtl_arena_destroy (gp_alloc_arena);
+ 		gp_alloc_arena = 0;
+ 	}
 +    OSL_TRACE("rtl_memory_fini completed");
  }
  
  /* ================================================================= *
+@@ -225,7 +203,8 @@
+ 		}
+ 		else if (gp_alloc_arena == 0)
+ 		{
+-			if (rtl_memory_init())
++			ensureMemorySingleton();
++			if (gp_alloc_arena)
+ 			{
+ 				/* try again */
+ 				goto try_alloc;
 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=   \
+@@ -93,11 +93,8 @@
              $(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
+-.IF "$(OS)"=="MACOSX"
+-SLOFILES+=$(SLO)$/memory_fini.obj
 -.ENDIF
--
 +            $(SLO)$/alloc_arena.obj \
-+            $(SLO)$/alloc_fini.obj
++            $(SLO)$/memory_fini.obj
  
- OBJFILES=   \
-             $(OBJ)$/memory.obj      \
-@@ -132,11 +128,8 @@ OBJFILES=   \
+ 
+ #.IF "$(UPDATER)"=="YES"
+@@ -126,11 +123,8 @@
              $(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
+-.IF "$(OS)"=="MACOSX"
+-OBJFILES+=$(OBJ)$/memory_fini.obj
 -.ENDIF
 +            $(OBJ)$/alloc_arena.obj \
-+            $(OBJ)$/alloc_fini.obj
++            $(OBJ)$/memory_fini.obj
  
  
  APP1TARGET=gen_makefile
--- 
-1.7.4.1
-
diff --git a/openoffice.org.spec b/openoffice.org.spec
index 0fb9643..eb62635 100644
--- a/openoffice.org.spec
+++ b/openoffice.org.spec
@@ -3953,7 +3953,7 @@ unopkg remove --shared org.openoffice.legacy.ScriptProviderForPython.zip > /dev/
 %endif
 
 %changelog
-* Tue Apr 05 2011 Caolán McNamara <caolanm at redhat.com>- 1:3.3.0-20.5-UNBUILT
+* Tue Apr 05 2011 Caolán McNamara <caolanm at redhat.com>- 1:3.3.0-20.5
 - Resolves: rhbz#655686 get order of shutdown correct
 
 * Mon Apr 04 2011 Caolán McNamara <caolanm at redhat.com>- 1:3.3.0-20.4


More information about the scm-commits mailing list