summaryrefslogtreecommitdiff
path: root/solenv
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2013-02-14 15:21:46 +0100
committerCaolán McNamara <caolanm@redhat.com>2013-02-15 14:56:10 +0000
commit635d439091868f73023f4da6d5585795f520908b (patch)
treea2c305f9819dff648a86025b44f3acdc179abf1c /solenv
parent2045714acd0a8858ed7c1c60d42996bd00be4dac (diff)
rhbz#908674: Adapt rtl::Allocator::construct to C++11
...otherwise, at least with some --with-system-boost versions and C++11 compilers, like with Fedora's boost-1.50.0-4.fc18.x86_64 and gcc-c++-4.7.2-8.fc18.x86_64, using this to copy-construct an instance of boost::unordered::detail::ptr_node<std::pair<rtl::OUString,Bootstrap_Impl*>> in the call to p_bootstrap_map->insert(...) in rtl_bootstrap_args_open (sal/rtl/source/bootstrap.cxx) would memcopy the ptr_node and fail to call rtl_uString_acquire, leading to memory corruption later on when rtl_uString_release is called one time too often. It is not entirely clear to me whether this is a shortcoming of the given Boost version, but this patch solves the problem and brings rtl::Allocator::construct in line with the (changed) Allocator requirements of C++11 anyway. The problem potentially lurks with every use of rtl::Allocator, but only showed now begining with LO 4.0 where e5111574fd904b38a3980ca4ea3d21cfcb22dea6 "Revert 'sb140: sb140: #i116981# clean up memory upon exit'" re-introduced code into rtl_bootstrap_args_open that inserts into a boost::unordered_map that uses rtl::Allocator. (cherry picked from commit c91d353872b7d4e1a39192bff1444b46cab6e5eb) Conflicts: config_host/config_global.h.in ...solved by resorting to the old -DHAVE_CXX11_PERFECT_FORWARDING logic spread across various solenv/.../*.mk instead. Change-Id: I3be22f59a8eb49d31458480c27f3ce15803c7fd4 Reviewed-on: https://gerrit.libreoffice.org/2166 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com> Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'solenv')
-rw-r--r--solenv/gbuild/platform/com_GCC_defs.mk6
-rw-r--r--solenv/gbuild/platform/com_MSC_defs.mk6
-rw-r--r--solenv/inc/settings.mk4
3 files changed, 16 insertions, 0 deletions
diff --git a/solenv/gbuild/platform/com_GCC_defs.mk b/solenv/gbuild/platform/com_GCC_defs.mk
index 437cdd3eeca7..1f50a97d8a44 100644
--- a/solenv/gbuild/platform/com_GCC_defs.mk
+++ b/solenv/gbuild/platform/com_GCC_defs.mk
@@ -58,6 +58,12 @@ gb_COMPILERDEFS := \
-D$(COM) \
-DCPPU_ENV=$(gb_CPPU_ENV) \
+ifeq ($(HAVE_CXX11_PERFECT_FORWARDING),TRUE)
+gb_COMPILERDEFS += \
+ -DHAVE_CXX11_PERFECT_FORWARDING \
+
+endif
+
ifeq ($(HAVE_GCC_BUILTIN_ATOMIC),TRUE)
gb_COMPILERDEFS += \
-DHAVE_GCC_BUILTIN_ATOMIC \
diff --git a/solenv/gbuild/platform/com_MSC_defs.mk b/solenv/gbuild/platform/com_MSC_defs.mk
index a81b5df9d8f3..626274bc41ce 100644
--- a/solenv/gbuild/platform/com_MSC_defs.mk
+++ b/solenv/gbuild/platform/com_MSC_defs.mk
@@ -60,6 +60,12 @@ gb_COMPILERDEFS := \
-DCPPU_ENV=$(gb_CPPU_ENV) \
-DM1500 \
+ifeq ($(HAVE_CXX11_PERFECT_FORWARDING),TRUE)
+gb_COMPILERDEFS += \
+ -DHAVE_CXX11_PERFECT_FORWARDING \
+
+endif
+
gb_RCDEFS := \
-DWINVER=0x0400 \
-DWIN32 \
diff --git a/solenv/inc/settings.mk b/solenv/inc/settings.mk
index dbb513d2e06a..c1b6a7817c51 100644
--- a/solenv/inc/settings.mk
+++ b/solenv/inc/settings.mk
@@ -813,6 +813,10 @@ CDEFS+=$(CDEFS_PRESET)
CDEFS+=-DTIMELOG
.ENDIF
+.IF "$(HAVE_CXX11_PERFECT_FORWARDING)" == "TRUE"
+CDEFS += -DHAVE_CXX11_PERFECT_FORWARDING
+.ENDIF
+
CDEFSCXX=
CDEFSOBJ=
#CDEFSMT=-DMULTITHREAD