[Libreoffice-commits] core.git: 2 commits - external/firebird

Norbert Thiebaud nthiebaud at gmail.com
Thu Jul 3 08:33:01 PDT 2014


 external/firebird/ExternalProject_firebird.mk               |    1 
 external/firebird/UnpackedTarball_firebird.mk               |    1 
 external/firebird/firebird-no-open-temp-on-shutdown.patch.1 |  359 ++++++++++++
 3 files changed, 361 insertions(+)

New commits:
commit 4cf0e29ccf5191b7ba4ed84750108e5361bcde38
Author: Norbert Thiebaud <nthiebaud at gmail.com>
Date:   Thu Jul 3 16:19:00 2014 +0200

    Revert "firebird: enable-debug cause trouble due to a lifecycle management issue"
    
    This reverts commit 814818c3451fa32900c011278e2e5b62e3518eb0.
    Upstream patched the underlying cause

diff --git a/external/firebird/ExternalProject_firebird.mk b/external/firebird/ExternalProject_firebird.mk
index d25c667..6e3f582 100644
--- a/external/firebird/ExternalProject_firebird.mk
+++ b/external/firebird/ExternalProject_firebird.mk
@@ -50,6 +50,7 @@ $(call gb_ExternalProject_get_state_target,firebird,build):
 			--without-editline \
 			--disable-superserver \
 			--with-system-icu --without-fbsample --without-fbsample-db \
+			$(if $(filter TRUE,$(ENABLE_DEBUG)),--enable-debug) \
 			$(if $(CROSS_COMPILING),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)) \
 			$(if $(filter IOS ANDROID,$(OS)),--disable-shared,--disable-static) \
 		&& $(if $(filter WNT,$(OS)),\
commit c39f77fcbe3def727190def1c568c3b47aa8c3c3
Author: Norbert Thiebaud <nthiebaud at gmail.com>
Date:   Thu Jul 3 17:31:45 2014 +0200

    firebird: backport upstream patch to avoid life cycle issues
    
    with temp files...
    
    Change-Id: I3c76baa38c6854600fbfd1dd48c554ff8716969e

diff --git a/external/firebird/UnpackedTarball_firebird.mk b/external/firebird/UnpackedTarball_firebird.mk
index 77e691c..8f06102 100644
--- a/external/firebird/UnpackedTarball_firebird.mk
+++ b/external/firebird/UnpackedTarball_firebird.mk
@@ -16,6 +16,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,firebird,\
 	external/firebird/firebird-rpath.patch.0 \
 	external/firebird/firebird-c++11.patch.1 \
 	external/firebird/firebird-c++11replfn.patch.0 \
+	external/firebird/firebird-no-open-temp-on-shutdown.patch.1 \
 ))
 
 ifeq ($(OS)-$(COM),WNT-MSC)
diff --git a/external/firebird/firebird-no-open-temp-on-shutdown.patch.1 b/external/firebird/firebird-no-open-temp-on-shutdown.patch.1
new file mode 100644
index 0000000..5ce748c
--- /dev/null
+++ b/external/firebird/firebird-no-open-temp-on-shutdown.patch.1
@@ -0,0 +1,359 @@
+Only in firebird: Makefile
+Only in firebird: build.log
+diff -ur firebird.org/builds/posix/Makefile.in.client.gfix firebird/builds/posix/Makefile.in.client.gfix
+--- firebird.org/builds/posix/Makefile.in.client.gfix	2014-07-03 13:40:07.000000000 +0200
++++ firebird/builds/posix/Makefile.in.client.gfix	2014-07-03 13:45:17.000000000 +0200
+@@ -39,7 +39,8 @@
+ @SET_MAKE@
+ 
+ 
+-GFIX_Other_Sources = jrd/isc.cpp jrd/ThreadData.cpp jrd/path_utils.cpp common/UtilSvc.cpp
++GFIX_Other_Sources = jrd/isc.cpp jrd/ThreadData.cpp jrd/path_utils.cpp common/UtilSvc.cpp \
++					 $(OS_SPECIFIC_Sources)
+ 
+ GFIX_Files = alice_meta.epp alice.cpp exe.cpp tdr.cpp aliceMain.cpp
+ GFIX_Sources = $(addprefix alice/, $(GFIX_Files)) $(GFIX_Other_Sources)
+diff -ur firebird.org/builds/posix/Makefile.in.client.util firebird/builds/posix/Makefile.in.client.util
+--- firebird.org/builds/posix/Makefile.in.client.util	2014-07-03 13:40:07.000000000 +0200
++++ firebird/builds/posix/Makefile.in.client.util	2014-07-03 13:45:17.000000000 +0200
+@@ -90,7 +90,7 @@
+ 	$(FBCLASSES_MsgObjects) $(CLUMPLETS_Objects) $(FBCOMMON_ClientObjects)
+ 
+ 
+-FBGUARD_Other_Sources = jrd/isc.cpp jrd/divorce.cpp jrd/path_utils.cpp
++FBGUARD_Other_Sources = jrd/isc.cpp jrd/divorce.cpp jrd/path_utils.cpp $(OS_SPECIFIC_Sources)
+ FBGUARD_Files =  guard.cpp util.cpp
+ FBGUARD_Sources = $(addprefix utilities/guard/, $(FBGUARD_Files)) $(FBGUARD_Other_Sources)
+ FBGUARD_Objects = $(addprefix $(OBJ)/, $(addsuffix .o, $(basename $(FBGUARD_Sources)))) $(FBCLASSES_ClientObjects)
+diff -ur firebird.org/builds/posix/Makefile.in.embed.gfix firebird/builds/posix/Makefile.in.embed.gfix
+--- firebird.org/builds/posix/Makefile.in.embed.gfix	2014-07-03 13:40:07.000000000 +0200
++++ firebird/builds/posix/Makefile.in.embed.gfix	2014-07-03 13:54:55.000000000 +0200
+@@ -43,7 +43,8 @@
+ 			 alice.cpp exe.cpp tdr.cpp aliceMain.cpp
+ 
+ GFIX_Other_Sources += jrd/isc.cpp jrd/ThreadData.cpp jrd/path_utils.cpp \
+-					  common/UtilSvc.cpp
++					  common/UtilSvc.cpp \
++					  $(OS_SPECIFIC_Sources)
+ 
+ GFIX_Sources = $(addprefix alice/, $(GFIX_Files)) $(GFIX_Other_Sources)
+ GFIX_Objects = $(addprefix $(OBJ)/, $(addsuffix .o, $(basename $(GFIX_Sources))))
+Only in firebird/builds/posix: Makefile.in.embed.gfix.orig
+Only in firebird/builds/posix: Makefile.in.embed.gfix.rej
+Only in firebird/builds/posix: Makefile.in.embed.gfix~
+diff -ur firebird.org/builds/posix/Makefile.in.embed.util firebird/builds/posix/Makefile.in.embed.util
+--- firebird.org/builds/posix/Makefile.in.embed.util	2014-07-03 13:40:07.000000000 +0200
++++ firebird/builds/posix/Makefile.in.embed.util	2014-07-03 13:45:17.000000000 +0200
+@@ -103,7 +103,7 @@
+ $(FBCLASSES_MsgObjects) $(CLUMPLETS_Objects) $(FBCOMMON_ClientObjects)
+ 
+ 
+-FBGUARD_Other_Sources = jrd/isc.cpp jrd/divorce.cpp jrd/path_utils.cpp
++FBGUARD_Other_Sources = jrd/isc.cpp jrd/divorce.cpp jrd/path_utils.cpp $(OS_SPECIFIC_Sources)
+ FBGUARD_Files =  guard.cpp util.cpp
+ FBGUARD_Sources = $(addprefix utilities/guard/, $(FBGUARD_Files)) $(FBGUARD_Other_Sources)
+ FBGUARD_Objects = $(addprefix $(OBJ)/, $(addsuffix .o, $(basename $(FBGUARD_Sources)))) $(FBCLASSES_ClientObjects)
+diff -ur firebird.org/builds/posix/prefix.aix_powerpc_xlc firebird/builds/posix/prefix.aix_powerpc_xlc
+--- firebird.org/builds/posix/prefix.aix_powerpc_xlc	2014-07-03 13:40:07.000000000 +0200
++++ firebird/builds/posix/prefix.aix_powerpc_xlc	2014-07-03 13:45:17.000000000 +0200
+@@ -118,7 +118,7 @@
+ 	common/classes/MsgPrint.cpp common/classes/SafeArg.cpp \
+ 	common/classes/BaseStream.cpp common/classes/fb_string.cpp \
+ 	common/classes/TempFile.cpp \
+-	jrd/gds.cpp jrd/isc.cpp \
++	jrd/gds.cpp jrd/isc.cpp $(OS_SPECIFIC_Sources)\
+ 	jrd/os/posix/path_utils.cpp jrd/os/posix/os_utils.cpp \
+ 	jrd/os/posix/config_root.cpp jrd/os/posix/fbsyslog.cpp
+ 
+Only in firebird: config.log
+Only in firebird: config.status
+Only in firebird/extern/btyacc: btyacc
+Only in firebird: gen
+Only in firebird: libtool
+Only in firebird/src/dsql: dsql.tab.h
+Only in firebird/src/dsql: parse.cpp
+Only in firebird/src/gpre: gpre_meta.cpp
+Only in firebird/src/include/gen: autoconfig.h
+Only in firebird/src/include/gen: blrtable.h
+diff -ur firebird.org/src/jrd/gds.cpp firebird/src/jrd/gds.cpp
+--- firebird.org/src/jrd/gds.cpp	2014-07-03 13:40:08.000000000 +0200
++++ firebird/src/jrd/gds.cpp	2014-07-03 13:45:17.000000000 +0200
+@@ -200,8 +200,6 @@
+ 
+ static void		sanitize(Firebird::string& locale);
+ 
+-static void		safe_concat_path(TEXT* destbuf, const TEXT* srcbuf);
+-
+ // New functions that try to be safe.
+ static SLONG safe_interpret(char* const s, const size_t bufsize,
+ 	const ISC_STATUS** const vector, bool legacy = false);
+@@ -1734,7 +1732,7 @@
+ 	GDS_init_prefix();
+ 
+ 	strcpy(resultString, fb_prefix);	// safe - no BO
+-	safe_concat_path(resultString, file);
++	iscSafeConcatPath(resultString, file);
+ }
+ 
+ 
+@@ -1755,12 +1753,7 @@
+ 	GDS_init_prefix();
+ 
+ 	strcpy(string, fb_prefix_lock);	// safe - no BO
+-
+-	// if someone wants to know prefix for lock files,
+-	// sooner of all he wants that directory to exist
+-	os_utils::createLockDirectory(string);
+-
+-	safe_concat_path(string, root);
++	iscSafeConcatPath(string, root);
+ }
+ 
+ 
+@@ -1784,7 +1777,7 @@
+ 	GDS_init_prefix();
+ 
+ 	strcpy(string, fb_prefix_msg);	// safe - no BO
+-	safe_concat_path(string, root);
++	iscSafeConcatPath(string, root);
+ }
+ 
+ 
+@@ -3553,43 +3546,6 @@
+ 	}
+ }
+ 
+-static void safe_concat_path(TEXT *resultString, const TEXT *appendString)
+-{
+-/**************************************
+- *
+- *	s a f e _ c o n c a t _ p a t h
+- *
+- **************************************
+- *
+- * Functional description
+- *	Safely appends appendString to resultString using paths rules.
+- *  resultString must be at most MAXPATHLEN size.
+- *	Thread/signal safe code.
+- *
+- **************************************/
+-	size_t len = strlen(resultString);
+-	fb_assert(len > 0);
+-
+-	if (resultString[len - 1] != PathUtils::dir_sep && len < MAXPATHLEN - 1)
+-	{
+-		resultString[len++] = PathUtils::dir_sep;
+-		resultString[len] = 0;
+-	}
+-
+-	size_t alen = strlen(appendString);
+-	if (len + alen > MAXPATHLEN - 1)
+-	{
+-		alen = MAXPATHLEN - 1 - len;
+-	}
+-
+-	fb_assert(len < MAXPATHLEN);
+-	fb_assert(alen < MAXPATHLEN);
+-	fb_assert(len + alen < MAXPATHLEN);
+-
+-	memcpy(&resultString[len], appendString, alen);
+-	resultString[len + alen] = 0;
+-}
+-
+ 
+ void FB_EXPORTED gds__default_printer(void* /*arg*/, SSHORT offset, const TEXT* line)
+ {
+Only in firebird/src/jrd: gds.cpp.orig
+diff -ur firebird.org/src/jrd/isc.cpp firebird/src/jrd/isc.cpp
+--- firebird.org/src/jrd/isc.cpp	2014-07-03 13:40:08.000000000 +0200
++++ firebird/src/jrd/isc.cpp	2014-07-03 13:45:17.000000000 +0200
+@@ -48,6 +48,8 @@
+ #include "../jrd/gds_proto.h"
+ #include "../jrd/isc_proto.h"
+ #include "../jrd/jrd_proto.h"
++#include "../jrd/os/os_utils.h"
++#include "../jrd/os/path_utils.h"
+ 
+ #include "../common/classes/init.h"
+ 
+@@ -632,3 +634,61 @@
+ 	iscLogStatus(text, s);
+ }
+ 
++
++void iscPrefixLock(TEXT* string, const TEXT* root, bool createLockDir)
++{
++/**************************************
++ *
++ *	i s c P r e f i x L o c k
++ *
++ **************************************
++ *
++ * Functional description
++ *	Find appropriate Firebird lock file prefix.
++ *
++ **************************************/
++	gds__prefix_lock(string, "");
++
++	if (createLockDir)
++		os_utils::createLockDirectory(string);
++
++	iscSafeConcatPath(string, root);
++}
++
++
++void iscSafeConcatPath(TEXT *resultString, const TEXT *appendString)
++{
++/**************************************
++ *
++ *	i s c S a f e C o n c a t P a t h
++ *
++ **************************************
++ *
++ * Functional description
++ *	Safely appends appendString to resultString using paths rules.
++ *  resultString must be at most MAXPATHLEN size.
++ *	Thread/signal safe code.
++ *
++ **************************************/
++	size_t len = strlen(resultString);
++	fb_assert(len > 0);
++
++	if (resultString[len - 1] != PathUtils::dir_sep && len < MAXPATHLEN - 1)
++	{
++		resultString[len++] = PathUtils::dir_sep;
++		resultString[len] = 0;
++	}
++
++	size_t alen = strlen(appendString);
++	if (len + alen > MAXPATHLEN - 1)
++	{
++		alen = MAXPATHLEN - 1 - len;
++	}
++
++	fb_assert(len < MAXPATHLEN);
++	fb_assert(alen < MAXPATHLEN);
++	fb_assert(len + alen < MAXPATHLEN);
++
++	memcpy(&resultString[len], appendString, alen);
++	resultString[len + alen] = 0;
++}
+diff -ur firebird.org/src/jrd/isc_proto.h firebird/src/jrd/isc_proto.h
+--- firebird.org/src/jrd/isc_proto.h	2014-07-03 13:40:08.000000000 +0200
++++ firebird/src/jrd/isc_proto.h	2014-07-03 13:45:17.000000000 +0200
+@@ -44,4 +44,7 @@
+ struct _SECURITY_ATTRIBUTES* ISC_get_security_desc();
+ #endif
+ 
++void iscPrefixLock(TEXT* string, const TEXT* root, bool createLockDir);
++void iscSafeConcatPath(TEXT *resultString, const TEXT *appendString);
++
+ #endif // JRD_ISC_PROTO_H
+diff -ur firebird.org/src/jrd/isc_sync.cpp firebird/src/jrd/isc_sync.cpp
+--- firebird.org/src/jrd/isc_sync.cpp	2014-07-03 13:40:08.000000000 +0200
++++ firebird/src/jrd/isc_sync.cpp	2014-07-03 13:45:17.000000000 +0200
+@@ -2296,7 +2296,7 @@
+ {
+ #ifndef WIN_NT
+ 	TEXT expanded_filename[MAXPATHLEN];
+-	gds__prefix_lock(expanded_filename, filename);
++	iscPrefixLock(expanded_filename, filename, false);
+ 
+ 	// We can't do much (specially in dtors) when it fails
+ 	// therefore do not check for errors - at least it's just /tmp.
+@@ -2332,7 +2332,7 @@
+  **************************************/
+ 
+ 	TEXT expanded_filename[MAXPATHLEN];
+-	gds__prefix_lock(expanded_filename, filename);
++	iscPrefixLock(expanded_filename, filename, true);
+ 
+ /* make the complete filename for the init file this file is to be used as a
+    master lock to eliminate possible race conditions with just a single file
+@@ -2340,7 +2340,7 @@
+    lock to a LCK_SHARED lock is not atomic*/
+ 
+ 	TEXT init_filename[MAXPATHLEN];
+-	gds__prefix_lock(init_filename, INIT_FILE);
++	iscPrefixLock(init_filename, INIT_FILE, true);
+ 
+ 	const bool trunc_flag = (length != 0);
+ 
+@@ -2373,7 +2373,7 @@
+ 	if (fdSem < 0)
+ 	{
+ 		TEXT sem_filename[MAXPATHLEN];
+-		gds__prefix_lock(sem_filename, SEM_FILE);
++		iscPrefixLock(sem_filename, SEM_FILE, true);
+ 		const int f = openFile(sem_filename);
+ 		if (f == -1)
+ 		{
+@@ -2554,7 +2554,7 @@
+ 	int retry_count = 0;
+ 
+ 	TEXT expanded_filename[MAXPATHLEN];
+-	gds__prefix_lock(expanded_filename, filename);
++	iscPrefixLock(expanded_filename, filename, true);
+ 
+ 	const bool trunc_flag = (length != 0);
+ 	bool init_flag = false;
+@@ -4187,7 +4187,7 @@
+ 	CloseHandle(shmem_data->sh_mem_hdr_object);
+ 
+ 	TEXT expanded_filename[MAXPATHLEN];
+-	gds__prefix_lock(expanded_filename, shmem_data->sh_mem_name);
++	iscPrefixLock(expanded_filename, shmem_data->sh_mem_name, false);
+ 
+ 	// Delete file only if it is not used by anyone else
+ 	HANDLE hFile = CreateFile(expanded_filename,
+Only in firebird/src/jrd: isc_sync.cpp.orig
+diff -ur firebird.org/src/jrd/svc.cpp firebird/src/jrd/svc.cpp
+--- firebird.org/src/jrd/svc.cpp	2014-07-03 13:40:08.000000000 +0200
++++ firebird/src/jrd/svc.cpp	2014-07-03 13:45:17.000000000 +0200
+@@ -1360,7 +1360,7 @@
+ 					gds__prefix(auxBuf, "");
+ 					break;
+ 				case isc_info_svc_get_env_lock:
+-					gds__prefix_lock(auxBuf, "");
++					iscPrefixLock(auxBuf, "", false);
+ 					break;
+ 				case isc_info_svc_get_env_msg:
+ 					gds__prefix_msg(auxBuf, "");
+@@ -1844,7 +1844,7 @@
+ 					gds__prefix(PathBuffer, "");
+ 					break;
+ 				case isc_info_svc_get_env_lock:
+-					gds__prefix_lock(PathBuffer, "");
++					iscPrefixLock(PathBuffer, "", false);
+ 					break;
+ 				case isc_info_svc_get_env_msg:
+ 					gds__prefix_msg(PathBuffer, "");
+Only in firebird/src/jrd: svc.cpp.orig
+diff -ur firebird.org/src/jrd/trace/TraceConfigStorage.cpp firebird/src/jrd/trace/TraceConfigStorage.cpp
+--- firebird.org/src/jrd/trace/TraceConfigStorage.cpp	2014-07-03 13:40:08.000000000 +0200
++++ firebird/src/jrd/trace/TraceConfigStorage.cpp	2014-07-03 13:45:17.000000000 +0200
+@@ -221,7 +221,7 @@
+ 		fb_assert(m_base->cnt_uses == 0);
+ 
+ 		char dir[MAXPATHLEN];
+-		gds__prefix_lock(dir, "");
++		iscPrefixLock(dir, "", true);
+ 
+ 		PathName filename = TempFile::create("fb_trace_", dir);
+ 		filename.copyTo(cfg_file_name, sizeof(m_base->cfg_file_name));
+Only in firebird/src/jrd/trace: TraceConfigStorage.cpp.orig
+diff -ur firebird.org/src/jrd/trace/TraceLog.cpp firebird/src/jrd/trace/TraceLog.cpp
+--- firebird.org/src/jrd/trace/TraceLog.cpp	2014-07-03 13:40:08.000000000 +0200
++++ firebird/src/jrd/trace/TraceLog.cpp	2014-07-03 13:45:17.000000000 +0200
+@@ -69,7 +69,7 @@
+ 	}
+ 
+ 	char dir[MAXPATHLEN];
+-	gds__prefix_lock(dir, "");
++	iscPrefixLock(dir, "", true);
+ 	PathUtils::concatPath(m_baseFileName, dir, fileName);
+ 
+ 	TraceLogGuard guard(this);
+Only in firebird/src/jrd/trace: TraceLog.cpp.orig
+Only in firebird/src/misc: codes.cpp
+Only in firebird: temp


More information about the Libreoffice-commits mailing list