From 5246fc9cddc834365fea9e0fe8e0d328e98186f9 Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Mon, 2 May 2011 03:44:00 +0200 Subject: [PATCH 01/44] Uninstall files of old packages when new packages are installed over an old one. Also automatically add missing -dev symlinks to packages and check SONAME's. This patch was originally written by me for Imprudence. --- scripts/install.py | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/scripts/install.py b/scripts/install.py index 85818bc9a..605dcc103 100755 --- a/scripts/install.py +++ b/scripts/install.py @@ -535,24 +535,24 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package""" platform, cache_dir)) to_install = [] + to_uninstall = [] #print "self._installed",self._installed for ifile in ifiles: if ifile.pkgname not in self._installed: to_install.append(ifile) elif ifile.url not in self._installed[ifile.pkgname].urls(): + to_uninstall.append(ifile.pkgname) to_install.append(ifile) elif ifile.md5sum != \ self._installed[ifile.pkgname].get_md5sum(ifile.url): - # *TODO: We may want to uninstall the old version too - # when we detect it is installed, but the md5 sum is - # different. + to_uninstall.append(ifile.pkgname) to_install.append(ifile) else: #print "Installation up to date:", # ifile.pkgname,ifile.platform_path pass #print "to_install",to_install - return to_install + return [to_install, to_uninstall] def _install(self, to_install, install_dir): for ifile in to_install: @@ -565,17 +565,43 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package""" tar.extractall(path=install_dir) except AttributeError: _extractall(tar, path=install_dir) + symlinks = [] + if _get_platform() == 'linux' or _get_platform() == 'linux64': + first = 1 + for tfile in tar.getnames(): + if tfile.find('.so.') > 0: + LINK = re.sub(r'\.so\.[0-9.]*$', '.so', tfile) + link_name = install_dir + "/" + LINK + if not os.path.exists(link_name): + if first == 1: + first = 0 + print "Adding missing symlink(s) for package %s:" % ifile.filename + target = os.path.basename(tfile) + soname = os.popen("readelf -d \"%(install_dir)s/%(tfile)s\" %(stderr_redirect)s" + " | grep SONAME | sed -e 's/.*\[//;s/\].*//'" % + {"install_dir": install_dir, "tfile": tfile, "stderr_redirect": ("2>/dev/null" if self._dryrun else "")}).read() + soname = soname.strip() + if soname: # not empty + tmpfname = os.path.dirname(LINK) + "/" + soname + if os.path.exists(install_dir + "/" + tmpfname): + target = soname + else: + print "WARNING: SONAME %s doesn't exist!" % tmpfname + if not self._dryrun: + os.symlink(target, link_name) + symlinks += [LINK] + print " %s --> %s" % (LINK, target) if ifile.pkgname in self._installed: self._installed[ifile.pkgname].add_files( ifile.url, - tar.getnames()) + tar.getnames() + symlinks) self._installed[ifile.pkgname].set_md5sum( ifile.url, ifile.md5sum) else: # *HACK: this understands the installed package syntax. definition = { ifile.url : - {'files': tar.getnames(), + {'files': tar.getnames() + symlinks, 'md5sum' : ifile.md5sum } } self._installed[ifile.pkgname] = InstalledPackage(definition) self._installed_changed = True @@ -595,12 +621,17 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package""" cache_dir = os.path.realpath(cache_dir) _mkdir(install_dir) _mkdir(cache_dir) - to_install = self._build_ifiles(platform, cache_dir) + to_install_uninstall = self._build_ifiles(platform, cache_dir) + to_install = to_install_uninstall[0] + to_uninstall = to_install_uninstall[1] # Filter for files which we actually requested to install. to_install = [ifl for ifl in to_install if ifl.pkgname in installables] + to_uninstall = [ifl for ifl in to_uninstall if ifl in installables] for ifile in to_install: ifile.fetch_local() + if to_uninstall: + self.uninstall(to_uninstall, install_dir) self._install(to_install, install_dir) def do_install(self, installables, platform, install_dir, cache_dir=None, From 1510d5ff5a55438eec39b59905bafc1bbaaf53f7 Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Mon, 2 May 2011 04:35:56 +0200 Subject: [PATCH 02/44] Use linux64 key on x86_64 --- scripts/install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install.py b/scripts/install.py index 605dcc103..e53f664b4 100755 --- a/scripts/install.py +++ b/scripts/install.py @@ -818,7 +818,7 @@ def _get_platform(): # TODO -- someday when install.py accepts a platform of the form # os/arch/compiler/compiler_version then we can replace the # 'linux64' platform with 'linux/x86_64/gcc/4.1' - this_platform = 'linux' + this_platform = 'linux64' return this_platform def _getuser(): From 9bcc08df1aa20aad340307c4ac6f0d6884a56f4f Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Mon, 2 May 2011 04:36:47 +0200 Subject: [PATCH 03/44] Don't barf when Google PerfTools are not found, but simply disable it. Plus bug fix (missing NOT): in the case that USE_GOOGLE_PERFTOOLS is not set we DON'T want to build with Google TCMalloc. --- indra/cmake/GooglePerfTools.cmake | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake index a5f957a20..0b483e5cf 100644 --- a/indra/cmake/GooglePerfTools.cmake +++ b/indra/cmake/GooglePerfTools.cmake @@ -25,9 +25,11 @@ else (STANDALONE) endif (LINUX) endif (STANDALONE) -#if (GOOGLE_PERFTOOLS_FOUND) -# set(USE_GOOGLE_PERFTOOLS ON CACHE BOOL "Build with Google PerfTools support.") -#endif (GOOGLE_PERFTOOLS_FOUND) +if (GOOGLE_PERFTOOLS_FOUND) + set(USE_GOOGLE_PERFTOOLS ON CACHE BOOL "Build with Google PerfTools support.") +else (GOOGLE_PERFTOOLS_FOUND) + set(USE_GOOGLE_PERFTOOLS OFF) +endif (GOOGLE_PERFTOOLS_FOUND) # XXX Disable temporarily, until we have compilation issues on 64-bit # Etch sorted. @@ -41,7 +43,7 @@ else (USE_GOOGLE_PERFTOOLS) set(TCMALLOC_FLAG -ULL_USE_TCMALLOC) endif (USE_GOOGLE_PERFTOOLS) -if (NOT(DISABLE_TCMALLOC OR USE_GOOGLE_PERFTOOLS)) +if (NOT(DISABLE_TCMALLOC OR NOT USE_GOOGLE_PERFTOOLS)) message(STATUS "Building with Google TCMalloc") set(TCMALLOC_FLAG -DLL_USE_TCMALLOC=1_) include_directories(${GOOGLE_PERFTOOLS_INCLUDE_DIR}) From b7aaef7e91529819f36600953765a9cc9e11111f Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Mon, 2 May 2011 15:15:23 +0200 Subject: [PATCH 04/44] Set appropriate compiler options for x86_64. Using -march=pentium4 break compilation on 64bit. A pentium isn't a 64bit cpu. The used options were copied from imprudence. --- indra/cmake/00-Common.cmake | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 1e423bd29..fdc18ff3c 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -201,10 +201,18 @@ if (LINUX) # this stops us requiring a really recent glibc at runtime add_definitions(-fno-stack-protector) endif (NOT STANDALONE) - set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -march=pentium4 -mfpmath=sse -msse2 ${GCC_EXTRA_OPTIMIZATIONS}") - set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2} -march=pentium4 -mfpmath=sse -msse2 "${GCC_EXTRA_OPTIMIZATIONS}) - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -march=pentium4 -mfpmath=sse -msse2 ${GCC_EXTRA_OPTIMIZATIONS}") - set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_C_FLAGS_RELWITHDEBINFO} -march=pentium4 -mfpmath=sse -msse2 "${GCC_EXTRA_OPTIMIZATIONS}) + if (${ARCH} STREQUAL "x86_64") + add_definitions(-DLINUX64=1 -pipe) + set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers") + set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers") + else (${ARCH} STREQUAL "x86_64") + set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -march=pentium4 -mfpmath=sse -msse2 ${GCC_EXTRA_OPTIMIZATIONS}") + set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2} -march=pentium4 -mfpmath=sse -msse2 "${GCC_EXTRA_OPTIMIZATIONS}) + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -march=pentium4 -mfpmath=sse -msse2 ${GCC_EXTRA_OPTIMIZATIONS}") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -march=pentium4 -mfpmath=sse -msse2 "${GCC_EXTRA_OPTIMIZATIONS}) + endif (${ARCH} STREQUAL "x86_64") endif (VIEWER) set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}") @@ -212,6 +220,8 @@ if (LINUX) set(CMAKE_C_FLAGS_RELEASE "-O3 ${CMAKE_C_FLAGS_RELEASE}") set(CMAKE_CXX_FLAGS_RELEASESSE2 "-O3 ${CMAKE_CXX_FLAGS_RELEASESSE2}") set(CMAKE_C_FLAGS_RELEASESSE2 "-O3 ${CMAKE_C_FLAGS_RELEASESSE2}") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_C_FLAGS_RELWITHDEBINFO}") endif (LINUX) From 1b4ae2e3b5285af910c8daeaf5280d8a110df1cd Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Mon, 2 May 2011 15:26:49 +0200 Subject: [PATCH 05/44] Removed generated file mime_types.xml, and fixed indentation in the source files. indra/newview/skins/default/xui/en-us/mime_types.xml should be generated from mime_types_linux.xml, mime_types_mac.xml or mime_types_windows.xml by copying it when packaging. Hence, it should never be used. Note, this is an exact sync with imprudence. --- .../skins/default/xui/en-us/mime_types.xml | 445 ------------------ .../default/xui/en-us/mime_types_linux.xml | 34 +- .../default/xui/en-us/mime_types_mac.xml | 34 +- 3 files changed, 34 insertions(+), 479 deletions(-) delete mode 100644 indra/newview/skins/default/xui/en-us/mime_types.xml diff --git a/indra/newview/skins/default/xui/en-us/mime_types.xml b/indra/newview/skins/default/xui/en-us/mime_types.xml deleted file mode 100644 index 4a7a6e17a..000000000 --- a/indra/newview/skins/default/xui/en-us/mime_types.xml +++ /dev/null @@ -1,445 +0,0 @@ - - - - (Unknown) - - - none - - - media_plugin_webkit - - - - - icn_media_web.tga - - - text/html - - - This location has Web content - - - Show Web content - - - true - - - false - - - - - - video/* - - - icn_media_movie.tga - - - There is a movie to play here - - - Play movie - - - false - - - true - - - - - - icn_media_web.tga - - - image/* - - - There is an image at this location - - - View this location's image - - - false - - - false - - - - - - icn_media_web.tga - - - audio/* - - - There is audio at this location - - - Play this location's audio - - - false - - - true - - - - - - movie - - - media_plugin_quicktime - - - - - - none - - - media_plugin_quicktime - - - - - - none - - - - - - audio - - - - - - movie - - - - - - image - - - - - - movie - - - media_plugin_quicktime - - - - - - web - - - - - - audio - - - - - - image - - - - - - image - - - - - - image - - - - - - movie - - - media_plugin_quicktime - - - - - - web - - - - - - image - - - - - - audio - - - media_plugin_quicktime - - - - - - audio - - - media_plugin_quicktime - - - - - - audio - - - media_plugin_quicktime - - - - - - audio - - - media_plugin_quicktime - - - - - - image - - - media_plugin_webkit - - - - - - image - - - media_plugin_webkit - - - - - - image - - - media_plugin_webkit - - - - - - image - - - media_plugin_webkit - - - - - - image - - - media_plugin_webkit - - - - - - image - - - media_plugin_webkit - - - - - - web - - - media_plugin_webkit - - - - - - text - - - media_plugin_webkit - - - - - - text - - - media_plugin_webkit - - - - - - movie - - - media_plugin_quicktime - - - - - - movie - - - media_plugin_quicktime - - - - - - movie - - - media_plugin_quicktime - - - - - - movie - - - media_plugin_quicktime - - - - - - movie - - - media_plugin_quicktime - - - - - - movie - - - media_plugin_quicktime - - - diff --git a/indra/newview/skins/default/xui/en-us/mime_types_linux.xml b/indra/newview/skins/default/xui/en-us/mime_types_linux.xml index f04992ade..e95b371d0 100644 --- a/indra/newview/skins/default/xui/en-us/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/en-us/mime_types_linux.xml @@ -175,8 +175,8 @@ movie - media_plugin_gstreamer - + media_plugin_gstreamer + movie @@ -384,8 +384,8 @@ web - media_plugin_webkit - + media_plugin_webkit + diff --git a/indra/newview/skins/default/xui/en-us/mime_types_mac.xml b/indra/newview/skins/default/xui/en-us/mime_types_mac.xml index 5b66271a5..7931e55c0 100644 --- a/indra/newview/skins/default/xui/en-us/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/en-us/mime_types_mac.xml @@ -175,8 +175,8 @@ movie - media_plugin_quicktime - + media_plugin_quicktime + movie @@ -384,8 +384,8 @@ web - media_plugin_webkit - + media_plugin_webkit + From 094587aefd6afcb5346ec67e48676f17201ea7b1 Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Mon, 2 May 2011 19:40:33 +0200 Subject: [PATCH 06/44] Make viewer compile on standalone linux x86_64 This involves making libllcommon shared, a change that was not finished for windows/Mac. More changes are needed to indra/newview/viewer_manifest.py for those two operating systems, as well as to indra/copy_win_scripts. I did not test this on linux 32bit, nor non-standalone on that OS, either. I did not check voice (which will very likely not work anyway on 64bit). And currently the webkit plugin doesn't work for me, but I'll fix that in a different commit. --- indra/cmake/APR.cmake | 13 ++-- indra/cmake/LLCommon.cmake | 10 ++- indra/cmake/ViewerMiscLibs.cmake | 21 +++++- indra/lib/python/indra/util/llmanifest.py | 17 +++-- indra/llcommon/CMakeLists.txt | 2 +- indra/llcommon/llpreprocessor.h | 17 +---- indra/llcommon/llstring.h | 1 + indra/media_plugins/example/CMakeLists.txt | 2 +- indra/media_plugins/webkit/CMakeLists.txt | 1 + indra/newview/CMakeLists.txt | 23 ++++--- indra/newview/linux_tools/wrapper.sh | 53 ++++---------- indra/newview/llfolderview.h | 2 +- indra/newview/llinventorybridge.h | 2 +- indra/newview/llpanelinventory.cpp | 5 +- indra/newview/viewer_manifest.py | 80 ++++++++++++++++++---- install.xml | 23 +++++++ 16 files changed, 167 insertions(+), 105 deletions(-) diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake index 5cd150d58..d1f089891 100644 --- a/indra/cmake/APR.cmake +++ b/indra/cmake/APR.cmake @@ -14,16 +14,18 @@ else (STANDALONE) use_prebuilt_binary(apr_suite) if (WINDOWS) set(APR_LIBRARIES - debug ${ARCH_PREBUILT_DIRS_DEBUG}/apr-1.lib - optimized ${ARCH_PREBUILT_DIRS_RELEASE}/apr-1.lib + debug ${ARCH_PREBUILT_DIRS_DEBUG}/libapr-1.lib + optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.lib ) set(APRICONV_LIBRARIES debug ${ARCH_PREBUILT_DIRS_DEBUG}/libapriconv-1.lib optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libapriconv-1.lib ) + # Doesn't need to link with iconv.dll + set(APRICONV_LIBRARIES "") set(APRUTIL_LIBRARIES - debug ${ARCH_PREBUILT_DIRS_DEBUG}/aprutil-1.lib - optimized ${ARCH_PREBUILT_DIRS_RELEASE}/aprutil-1.lib + debug ${ARCH_PREBUILT_DIRS_DEBUG}/libaprutil-1.lib ${APRICONV_LIBRARIES} + optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.lib ${APRICONV_LIBRARIES} ) elseif (DARWIN) set(APR_LIBRARIES @@ -41,9 +43,8 @@ else (STANDALONE) set(APRICONV_LIBRARIES iconv) endif (WINDOWS) set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/apr-1) - set(APRUTIL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/apr-1) if (LINUX AND VIEWER) - list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} uuid) + list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES}) endif (LINUX AND VIEWER) endif (STANDALONE) diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake index 410766e4f..d87d3c015 100644 --- a/indra/cmake/LLCommon.cmake +++ b/indra/cmake/LLCommon.cmake @@ -7,9 +7,15 @@ include(ZLIB) set(LLCOMMON_INCLUDE_DIRS ${LIBS_OPEN_DIR}/llcommon - ${APRUTIL_INCLUDE_DIR} ${APR_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ) -set(LLCOMMON_LIBRARIES llcommon) +if (LINUX) + # In order to support using ld.gold on linux, we need to explicitely + # specify all libraries that llcommon uses. + # llcommon uses `clock_gettime' which is provided by librt on linux. + set(LLCOMMON_LIBRARIES llcommon rt) +else (LINUX) + set(LLCOMMON_LIBRARIES llcommon) +endif (LINUX) diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake index 746de0fe9..38d044473 100644 --- a/indra/cmake/ViewerMiscLibs.cmake +++ b/indra/cmake/ViewerMiscLibs.cmake @@ -2,10 +2,25 @@ include(Prebuilt) if (NOT STANDALONE) + use_prebuilt_binary(libuuid) use_prebuilt_binary(vivox) - if (LINUX) - #use_prebuilt_binary(libuuid) + if(LINUX) + if (${ARCH} STREQUAL "x86_64") + use_prebuilt_binary(32bitcompatibilitylibs) + endif (${ARCH} STREQUAL "x86_64") use_prebuilt_binary(fontconfig) - endif (LINUX) + endif(LINUX) +else (NOT STANDALONE) + # Download there even when using standalone. + set(STANDALONE OFF) + use_prebuilt_binary(vivox) + if(LINUX AND ${ARCH} STREQUAL "x86_64") + use_prebuilt_binary(32bitcompatibilitylibs) + endif(LINUX AND ${ARCH} STREQUAL "x86_64") + set(STANDALONE ON) endif(NOT STANDALONE) +if (WINDOWS) + use_prebuilt_binary(dbghelp) +endif (WINDOWS) + diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py index bfac97981..585b47d4a 100644 --- a/indra/lib/python/indra/util/llmanifest.py +++ b/indra/lib/python/indra/util/llmanifest.py @@ -119,6 +119,7 @@ ARGUMENTS=[ Example use: %(name)s --arch=i686 On Linux this would try to use Linux_i686Manifest.""", default=""), + dict(name='artwork', description='Artwork directory.', default=DEFAULT_SRCTREE), dict(name='build', description='Build directory.', default=DEFAULT_SRCTREE), dict(name='buildtype', description="""The build type used. ('Debug', 'Release', 'ReleaseSSE2' or 'RelWithDebInfo') Default is Release """, @@ -126,6 +127,9 @@ ARGUMENTS=[ dict(name='branding_id', description="""Identifier for the branding set to use. Currently, 'secondlife' or 'snowglobe')""", default='secondlife'), + dict(name='channel', + description="""The channel to use for updates, packaging, settings name, etc.""", + default=get_channel), dict(name='configuration', description="""The build configuration used. Only used on OS X for now, but it could be used for other platforms as well.""", @@ -136,16 +140,13 @@ ARGUMENTS=[ though it's not strictly a grid, 'firstlook' is also an acceptable value for this parameter.""", default=""), - dict(name='channel', - description="""The channel to use for updates, packaging, settings name, etc.""", - default=get_channel), - dict(name='login_channel', - description="""The channel to use for login handshake/updates only.""", - default=None), dict(name='installer_name', description=""" The name of the file that the installer should be packaged up into. Only used on Linux at the moment.""", default=None), + dict(name='login_channel', + description="""The channel to use for login handshake/updates only.""", + default=None), dict(name='login_url', description="""The url that the login screen displays in the client.""", default=None), @@ -156,7 +157,9 @@ ARGUMENTS=[ dict(name='source', description='Source directory.', default=DEFAULT_SRCTREE), - dict(name='artwork', description='Artwork directory.', default=DEFAULT_SRCTREE), + dict(name='standalone', + description='Set to ON if this is a standalone build.', + default="OFF"), dict(name='touch', description="""File to touch when action is finished. Touch file will contain the name of the final package in a form suitable diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index ca26d492a..4bcfce5b0 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -201,7 +201,7 @@ set_source_files_properties(${llcommon_HEADER_FILES} list(APPEND llcommon_SOURCE_FILES ${llcommon_HEADER_FILES}) -add_library (llcommon ${llcommon_SOURCE_FILES}) +add_library (llcommon SHARED ${llcommon_SOURCE_FILES}) add_dependencies(llcommon prepare) target_link_libraries( llcommon diff --git a/indra/llcommon/llpreprocessor.h b/indra/llcommon/llpreprocessor.h index 39a745f25..df49757a6 100644 --- a/indra/llcommon/llpreprocessor.h +++ b/indra/llcommon/llpreprocessor.h @@ -107,17 +107,7 @@ #endif -// Static linking with apr on windows needs to be declared. -#ifdef LL_WINDOWS -#ifndef APR_DECLARE_STATIC -#define APR_DECLARE_STATIC // For APR on Windows -#endif -#ifndef APU_DECLARE_STATIC -#define APU_DECLARE_STATIC // For APR util on Windows -#endif -#endif - -// Deal with the differeneces on Windows +// Deal with the differences on Windows #if defined(LL_WINDOWS) #define BOOST_REGEX_NO_LIB 1 #define CURL_STATICLIB 1 @@ -169,7 +159,6 @@ #define LL_DLLIMPORT #endif // LL_WINDOWS -/* #ifdef llcommon_EXPORTS // Compiling llcommon (shared) #define LL_COMMON_API LL_DLLEXPORT @@ -177,9 +166,5 @@ // Using llcommon (shared) #define LL_COMMON_API LL_DLLIMPORT #endif // llcommon_EXPORTS -*/ - -//I hate DLLs -SG -#define LL_COMMON_API #endif // not LL_LINDEN_PREPROCESSOR_H diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index 6b1115a54..4343a6385 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -36,6 +36,7 @@ #include #include #include +#include #if LL_LINUX || LL_SOLARIS #include diff --git a/indra/media_plugins/example/CMakeLists.txt b/indra/media_plugins/example/CMakeLists.txt index 56cefde4b..54dc5de1e 100644 --- a/indra/media_plugins/example/CMakeLists.txt +++ b/indra/media_plugins/example/CMakeLists.txt @@ -79,4 +79,4 @@ if (DARWIN) LINK_FLAGS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/../base/media_plugin_base.exp" ) -endif (DARWIN) \ No newline at end of file +endif (DARWIN) diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt index 05f123660..3b1f67954 100755 --- a/indra/media_plugins/webkit/CMakeLists.txt +++ b/indra/media_plugins/webkit/CMakeLists.txt @@ -27,6 +27,7 @@ include_directories( ${LLIMAGE_INCLUDE_DIRS} ${LLRENDER_INCLUDE_DIRS} ${LLWINDOW_INCLUDE_DIRS} + ${LLQTWEBKIT_INCLUDE_DIR} ) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index cecdbddbc..57a6163d7 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1467,6 +1467,7 @@ if (LINUX) COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + --standalone=${STANDALONE} --grid=${GRID} --channel=${VIEWER_CHANNEL} --login_channel=${VIEWER_LOGIN_CHANNEL} @@ -1591,17 +1592,17 @@ endif (LL_TESTS) # Don't do these for DARWIN or LINUX here -- they're taken care of by viewer_manifest.py if (WINDOWS) - #~ get_target_property(BUILT_LLCOMMON llcommon LOCATION) - #~ add_custom_command( - #~ TARGET ${VIEWER_BINARY_NAME} POST_BUILD - #~ COMMAND ${CMAKE_COMMAND} - #~ ARGS - #~ -E - #~ copy_if_different - #~ ${BUILT_LLCOMMON} - #~ ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} - #~ COMMENT "Copying llcommon.dll to the runtime folder." - #~ ) + get_target_property(BUILT_LLCOMMON llcommon LOCATION) + add_custom_command( + TARGET ${VIEWER_BINARY_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS + -E + copy_if_different + ${BUILT_LLCOMMON} + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} + COMMENT "Copying llcommon.dll to the runtime folder." + ) get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION) add_custom_command( diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh index ba101cdf9..77dd4d023 100755 --- a/indra/newview/linux_tools/wrapper.sh +++ b/indra/newview/linux_tools/wrapper.sh @@ -7,7 +7,7 @@ ## - Avoids using any OpenAL audio driver. #export LL_BAD_OPENAL_DRIVER=x ## - Avoids using any FMOD audio driver. -export LL_BAD_FMOD_DRIVER=x +#export LL_BAD_FMOD_DRIVER=x ## - Avoids using the FMOD ESD audio driver. #export LL_BAD_FMOD_ESD=x @@ -45,6 +45,7 @@ export LL_BAD_FMOD_DRIVER=x ## disable these by enabling this option: #export LL_DISABLE_GSTREAMER=x + ## Everything below this line is just for advanced troubleshooters. ##------------------------------------------------------------------- @@ -53,15 +54,8 @@ export LL_BAD_FMOD_DRIVER=x ## you're building your own viewer, bear in mind that the executable ## in the bin directory will be stripped: you should replace it with ## an unstripped binary before you run. -## -## I keep crashing without having GDB running, always run it if an -## environment variable is set. - -if [ -n "$ASCENDED_DEVELOPER" ]; then -# export LL_WRAPPER='cgdb --args' - export LL_WRAPPER='gdb --args' -# export LL_WRAPPER='valgrind --smc-check=all --error-limit=no --log-file=secondlife.vg --leak-check=full --suppressions=/usr/lib/valgrind/glibc-2.5.supp --suppressions=secondlife-i686.supp' -fi +#export LL_WRAPPER='gdb --args' +#export LL_WRAPPER='valgrind --smc-check=all --error-limit=no --log-file=secondlife.vg --leak-check=full --suppressions=/usr/lib/valgrind/glibc-2.5.supp --suppressions=secondlife-i686.supp' ## - Avoids an often-buggy X feature that doesn't really benefit us anyway. export SDL_VIDEO_X11_DGAMOUSE=0 @@ -74,13 +68,6 @@ if [ "$GTK_IM_MODULE" = "scim" ]; then export GTK_IM_MODULE=xim fi -# Work around for a crash bug when restarting OpenGL after a change in the -# graphic settings (anti-aliasing, VBO, FSAA, full screen mode, UI scale). -# When you enable this work around, you can change the settings without -# crashing, but you will have to restart the viewer after changing them -# because the display still gets corrupted. -export LL_OPENGL_RESTART_CRASH_BUG=x - ## - Automatically work around the ATI mouse cursor crash bug: ## (this workaround is disabled as most fglrx users do not see the bug) #if lsmod | grep fglrx &>/dev/null ; then @@ -121,7 +108,13 @@ if [ -n "$LL_TCMALLOC" ]; then fi export VIEWER_BINARY='singularity-do-not-run-directly' -export SL_ENV='LD_LIBRARY_PATH="`pwd`"/lib:"`pwd`"/app_settings/mozilla-runtime-linux-i686:"${LD_LIBRARY_PATH}"' +BINARY_TYPE=$(expr match "$(file -b bin/$VIEWER_BINARY)" '\(.*executable\)') +if [ "${BINARY_TYPE}" == "ELF 64-bit LSB executable" ]; then + export SL_ENV='LD_LIBRARY_PATH="`pwd`"/lib64:"`pwd`"/lib32:"${LD_LIBRARY_PATH}"' +else + export SL_ENV='LD_LIBRARY_PATH="`pwd`"/lib:"${LD_LIBRARY_PATH}"' +fi + export SL_CMD='$LL_WRAPPER bin/$VIEWER_BINARY' export SL_OPT="`cat gridargs.dat` $@" @@ -134,27 +127,7 @@ if [ -n "$LL_RUN_ERR" ]; then if [ "$LL_RUN_ERR" = "runerr" ]; then # generic error running the binary echo '*** Bad shutdown. ***' - BINARY_TYPE=$(expr match "$(file -b ${RUN_PATH}/bin/SLPlugin)" '\(.*executable\)') - BINARY_SYSTEM=$(expr match "$(file -b /bin/uname)" '\(.*executable\)') - if [ "${BINARY_SYSTEM}" == "ELF 64-bit LSB executable" -a "${BINARY_TYPE}" == "ELF 32-bit LSB executable" ]; then - echo - cat << EOFMARKER -You are running the Second Life Viewer on a x86_64 platform. The -most common problems when launching the Viewer (particularly -'bin/$VIEWER_BINARY: not found' and 'error while -loading shared libraries') may be solved by installing your Linux -distribution's 32-bit compatibility packages. -For example, on Ubuntu and other Debian-based Linuxes you might run: -$ sudo apt-get install ia32-libs ia32-libs-gtk ia32-libs-kde ia32-libs-sdl -EOFMARKER - fi + + fi fi - - -echo -echo '*******************************************************' -echo 'This is a BETA release of the Second Life linux client.' -echo 'Thank you for testing!' -echo 'Please see README-linux.txt before reporting problems.' -echo diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index 71b4e638d..9e4f9e24b 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -97,7 +97,7 @@ public: virtual void move( LLFolderViewEventListener* parent_listener ) = 0; virtual BOOL isItemCopyable() const = 0; virtual BOOL copyToClipboard() const = 0; - virtual void cutToClipboard() = 0; + virtual BOOL cutToClipboard() const = 0; virtual BOOL isClipboardPasteable() const = 0; virtual void pasteFromClipboard() = 0; virtual void pasteLinkFromClipboard() = 0; diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index dcadc2781..a3108d653 100755 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -232,7 +232,7 @@ public: virtual void move(LLFolderViewEventListener* new_parent_bridge) {} virtual BOOL isItemCopyable() const { return FALSE; } virtual BOOL copyToClipboard() const { return FALSE; } - virtual void cutToClipboard() {} + virtual BOOL cutToClipboard() const { return FALSE; } virtual BOOL isClipboardPasteable() const; virtual BOOL isClipboardPasteableAsLink() const; virtual void pasteFromClipboard() {} diff --git a/indra/newview/llpanelinventory.cpp b/indra/newview/llpanelinventory.cpp index 38521e7ab..38c90783b 100644 --- a/indra/newview/llpanelinventory.cpp +++ b/indra/newview/llpanelinventory.cpp @@ -144,7 +144,7 @@ public: virtual void move(LLFolderViewEventListener* parent_listener); virtual BOOL isItemCopyable() const; virtual BOOL copyToClipboard() const; - virtual void cutToClipboard(); + virtual BOOL cutToClipboard() const; virtual BOOL isClipboardPasteable() const; virtual void pasteFromClipboard(); virtual void pasteLinkFromClipboard(); @@ -596,8 +596,9 @@ BOOL LLTaskInvFVBridge::copyToClipboard() const return FALSE; } -void LLTaskInvFVBridge::cutToClipboard() +BOOL LLTaskInvFVBridge::cutToClipboard() const { + return FALSE; } BOOL LLTaskInvFVBridge::isClipboardPasteable() const diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index e560b7b46..02eca9bff 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -121,6 +121,8 @@ class ViewerManifest(LLManifest): def buildtype(self): return self.args['buildtype'] + def standalone(self): + return self.args['standalone'] == "ON" def grid(self): return self.args['grid'] def channel(self): @@ -752,19 +754,9 @@ class Linux_i686Manifest(LinuxManifest): def construct(self): super(Linux_i686Manifest, self).construct() - # install either the libllkdu we just built, or a prebuilt one, in - # decreasing order of preference. for linux package, this goes to bin/ - #~ try: - #~ self.path(self.find_existing_file('../llkdu/libllkdu.so', - #~ '../../libraries/i686-linux/lib_release_client/libllkdu.so'), - #~ dst='bin/libllkdu.so') - #~ # keep this one to preserve syntax, open source mangling removes previous lines - #~ pass - #~ except: - #~ print "Skipping libllkdu.so - not found" - #~ pass + self.path("../llcommon/libllcommon.so", "lib/libllcommon.so") - if self.prefix("../../libraries/i686-linux/lib_release_client", dst="lib"): + if (not self.standalone()) and self.prefix("../../libraries/i686-linux/lib_release_client", dst="lib"): try: self.path("libkdu_v42R.so", "libkdu.so") @@ -807,12 +799,72 @@ class Linux_i686Manifest(LinuxManifest): self.path("libvivoxsdk.so") self.end_prefix("lib") + class Linux_x86_64Manifest(LinuxManifest): def construct(self): super(Linux_x86_64Manifest, self).construct() - # support file for valgrind debug tool - self.path("secondlife-i686.supp") + self.path("../llcommon/libllcommon.so", "lib64/libllcommon.so") + + if (not self.standalone()) and self.prefix("../../libraries/x86_64-linux/lib_release_client", dst="lib64"): + self.path("libapr-1.so.0") + self.path("libaprutil-1.so.0") + self.path("libdb-4.2.so") + self.path("libcrypto.so.0.9.8") + self.path("libexpat.so.1") + self.path("libhunspell-1.2.so.0.0.0", "libhunspell-1.2.so.0") + self.path("libssl.so.0.9.8") + self.path("libuuid.so", "libuuid.so.1") + self.path("libSDL-1.2.so.0") + self.path("libELFIO.so") + self.path("libjpeg.so.7") + self.path("libpng12.so.0") + self.path("libopenjpeg.so.2") + self.path("libxml2.so.2") + #self.path("libz.so.1") #not needed + + # OpenAL + self.path("libopenal.so.1") + self.path("libalut.so.0") + + # GTK+ and dependencies + ## Lets just use the system libraries for all of these: + ##self.path("libatk-1.0.so.0") + ##self.path("libcairo.so.2") + ##self.path("libfontconfig.so.1") + ##self.path("libfreetype.so.6") + self.path("libgdk_pixbuf-2.0.so.0") # was commented to use systems gdk pixbufs instead - + # but seems webkit needs it o_O . Packaging for testing now. + ##self.path("libgdk-x11-2.0.so.0") + ##self.path("libgtk-x11-2.0.so.0") +# self.path("libpango-1.0.so.0") # use systems pango instead +# self.path("libpangoft2-1.0.so.0") # Both gdk pixbufs and pango would load systems modules +# self.path("libpangox-1.0.so.0") # and crash if not compatible or present. +# self.path("libpangoxft-1.0.so.0") # So we depend system gdk pixbufs and pango anyway. + ##self.path("libpixman-1.so.0") + + self.end_prefix("lib64") + + + # Vivox runtimes and libs + if self.prefix(src="vivox-runtime/i686-linux", dst="bin"): + self.path("SLVoice") + self.end_prefix("bin") + + if self.prefix(src="vivox-runtime/i686-linux", dst="lib32"): + #self.path("libalut.so") + self.path("libortp.so") + self.path("libvivoxsdk.so") + self.end_prefix("lib32") + + # 32bit libs needed for voice + if self.prefix("../../libraries/x86_64-linux/lib_release_client/32bit-compat", dst="lib32"): + self.path("libalut.so") + self.path("libidn.so.11") + self.path("libopenal.so.1") + # self.path("libortp.so") + self.path("libuuid.so.1") + self.end_prefix("lib32") if __name__ == "__main__": main() diff --git a/install.xml b/install.xml index 2a8b831e5..2ea504fe5 100644 --- a/install.xml +++ b/install.xml @@ -1340,6 +1340,29 @@ anguage Infrstructure (CLI) international standard + 32bitcompatibilitylibs + + copyright + Copyrights: Libidn: Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Simon Josefsson. License GPL v3.0. + Freealut, libuuid, openal-soft: see copyright and license of the + according main packages. + + description + 32bit libraries needed for using voice + license + gpl + packages + + linux64 + + md5sum + cbaafc55fb8b14283541791e82f13462 + url + http://imprudenceviewer.org/download/libs/linux64-32bitcompatibilitylibs-20100903.tar.bz2 + + + xmlrpc-epi copyright From 1ced64e0b4a202c88126f7cb027c4695b8caad31 Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Mon, 2 May 2011 20:15:50 +0200 Subject: [PATCH 07/44] Add LLWeb::curlEscape Since curl 7.21.2 - (October 13 2010), curl_escape (a deprecated function that will be removed in the future) changed it's behavior and no longer escapes the characters '-', '.', '_' and '~'. The only reasonable solution for us is to stop using it and use our own version that mimics the old behavior. The only other alternative would be to rename every .xml file with escaped characters in their name upon installation, depending on the behavior of the installed libcurl (on standalone anyway). However, if you add to that in the future curl_escape has to be replaced with curl_easy_escape, which is far from easy to call as it requires a CURL to be passed for which LL invented a wrapper in libllmessage, but did hide that (Curl::Easy is only defined in a .cpp file), then we're better of just using our own function, which I named LLWeb::curlEscape. --- indra/newview/ascentdaycyclemanager.cpp | 15 +++------------ indra/newview/llpanellogin.cpp | 23 +++++------------------ indra/newview/lltranslate.cpp | 3 ++- indra/newview/llwaterparammanager.cpp | 15 +++------------ indra/newview/llweb.cpp | 14 ++++++++++++++ indra/newview/llweb.h | 3 +++ indra/newview/llwldaycycle.cpp | 11 +++-------- indra/newview/llwlparammanager.cpp | 15 +++------------ 8 files changed, 36 insertions(+), 63 deletions(-) diff --git a/indra/newview/ascentdaycyclemanager.cpp b/indra/newview/ascentdaycyclemanager.cpp index b83168f64..43f243f08 100644 --- a/indra/newview/ascentdaycyclemanager.cpp +++ b/indra/newview/ascentdaycyclemanager.cpp @@ -134,10 +134,7 @@ void AscentDayCycleManager::loadPreset(const std::string & name,bool propagate) { // bugfix for SL-46920: preventing filenames that break stuff. - char * curl_str = curl_escape(name.c_str(), name.size()); - std::string escaped_filename(curl_str); - curl_free(curl_str); - curl_str = NULL; + std::string escaped_filename = LLWeb::curlEscape(name); escaped_filename += ".xml"; @@ -186,10 +183,7 @@ void AscentDayCycleManager::loadPreset(const std::string & name,bool propagate) void AscentDayCycleManager::savePreset(const std::string & name) { // bugfix for SL-46920: preventing filenames that break stuff. - char * curl_str = curl_escape(name.c_str(), name.size()); - std::string escaped_filename(curl_str); - curl_free(curl_str); - curl_str = NULL; + std::string escaped_filename = LLWeb::curlEscape(name); escaped_filename += ".xml"; @@ -340,10 +334,7 @@ bool AscentDayCycleManager::removeParamSet(const std::string& name, bool delete_ std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/days", "")); // use full curl escaped name - char * curl_str = curl_escape(name.c_str(), name.size()); - std::string escaped_name(curl_str); - curl_free(curl_str); - curl_str = NULL; + std::string escaped_name = LLWeb::curlEscape(name); gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml"); } diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index ece744e5e..7d7d65a35 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -911,20 +911,11 @@ void LLPanelLogin::loadLoginPage() std::string version = llformat("%d.%d.%d (%d)", LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VERSION_BUILD); - char* curl_channel = curl_escape(LL_CHANNEL, 0); - - char* curl_version = curl_escape(version.c_str(), 0); - - oStr << "&channel=" << curl_channel; - oStr << "&version=" << curl_version; - - curl_free(curl_channel); - curl_free(curl_version); + oStr << "&channel=" << LLWeb::curlEscape(LL_CHANNEL); + oStr << "&version=" << LLWeb::curlEscape(version); // Grid - char* curl_grid = curl_escape(LLViewerLogin::getInstance()->getGridLabel().c_str(), 0); - oStr << "&grid=" << curl_grid; - curl_free(curl_grid); + oStr << "&grid=" << LLWeb::curlEscape(LLViewerLogin::getInstance()->getGridLabel()); if (gHippoGridManager->getConnectedGrid()->isSecondLife()) { // find second life grid from login URI @@ -938,9 +929,7 @@ void LLPanelLogin::loadLoginPage() i = tmp.rfind('/'); if (i != std::string::npos) { tmp = tmp.substr(i+1); - char* curl_grid = curl_escape(tmp.c_str(), 0); - oStr << "&grid=" << curl_grid; - curl_free(curl_grid); + oStr << "&grid=" << LLWeb::curlEscape(tmp); } } } @@ -997,13 +986,11 @@ void LLPanelLogin::loadLoginPage() lastname = gSavedSettings.getString("LastName"); } - char* curl_region = curl_escape(region.c_str(), 0); + std::string curl_region = LLWeb::curlEscape(region); oStr <<"firstname=" << firstname << "&lastname=" << lastname << "&location=" << location << "®ion=" << curl_region; - curl_free(curl_region); - if (!password.empty()) { oStr << "&password=" << password; diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp index d4bb75913..501dfe29b 100644 --- a/indra/newview/lltranslate.cpp +++ b/indra/newview/lltranslate.cpp @@ -36,6 +36,7 @@ #include "lltranslate.h" #include "llui.h" #include "llversionviewer.h" +#include "llweb.h" // #include "llviewercontrol.h" @@ -79,7 +80,7 @@ void LLTranslate::translateMessage(LLHTTPClient::ResponderPtr &result, const std //static void LLTranslate::getTranslateUrl(std::string &translateUrl, const std::string &fromLang, const std::string &toLang, const std::string &mesg) { - std::string escaped_mesg = curl_escape(mesg.c_str(), mesg.size()); + std::string escaped_mesg = LLWeb::curlEscape(mesg); translateUrl = m_GoogleURL + escaped_mesg + m_GoogleLangSpec diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp index 848c8137f..682079249 100644 --- a/indra/newview/llwaterparammanager.cpp +++ b/indra/newview/llwaterparammanager.cpp @@ -143,10 +143,7 @@ void LLWaterParamManager::loadAllPresets(const std::string& file_name) void LLWaterParamManager::loadPreset(const std::string & name,bool propagate) { // bugfix for SL-46920: preventing filenames that break stuff. - char * curl_str = curl_escape(name.c_str(), name.size()); - std::string escaped_filename(curl_str); - curl_free(curl_str); - curl_str = NULL; + std::string escaped_filename = LLWeb::curlEscape(name); escaped_filename += ".xml"; @@ -199,10 +196,7 @@ void LLWaterParamManager::loadPreset(const std::string & name,bool propagate) void LLWaterParamManager::savePreset(const std::string & name) { // bugfix for SL-46920: preventing filenames that break stuff. - char * curl_str = curl_escape(name.c_str(), name.size()); - std::string escaped_filename(curl_str); - curl_free(curl_str); - curl_str = NULL; + std::string escaped_filename = LLWeb::curlEscape(name); escaped_filename += ".xml"; @@ -415,10 +409,7 @@ bool LLWaterParamManager::removeParamSet(const std::string& name, bool delete_fr std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", "")); // use full curl escaped name - char * curl_str = curl_escape(name.c_str(), name.size()); - std::string escaped_name(curl_str); - curl_free(curl_str); - curl_str = NULL; + std::string escaped_name = LLWeb::curlEscape(name); gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml"); } diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index 7a7c80fdf..b57e4bcc8 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -68,6 +68,20 @@ void LLWeb::loadURLExternal(const std::string& url) } +// static +std::string LLWeb::curlEscape(const std::string& url) +{ + std::stringstream escaped_url; + for (std::string::const_iterator iter = url.begin(); iter != url.end(); ++iter) + { + if (std::isalnum(*iter)) + escaped_url << *iter; + else + escaped_url << '%' << std::hex << std::setfill('0') << std::setw(2) << std::uppercase << (int)*iter; + } + return escaped_url.str(); +} + // static std::string LLWeb::escapeURL(const std::string& url) { diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h index 278821bac..8dd13ffcb 100644 --- a/indra/newview/llweb.h +++ b/indra/newview/llweb.h @@ -51,6 +51,9 @@ public: // Loads unescaped url in external browser. static void loadURLExternal(const std::string& url); + // Behaves like the old curl_escape. + static std::string curlEscape(const std::string& url); + // Returns escaped (eg, " " to "%20") url static std::string escapeURL(const std::string& url); diff --git a/indra/newview/llwldaycycle.cpp b/indra/newview/llwldaycycle.cpp index 2abf9d45a..577d1edc1 100644 --- a/indra/newview/llwldaycycle.cpp +++ b/indra/newview/llwldaycycle.cpp @@ -35,6 +35,7 @@ #include "llwldaycycle.h" #include "llsdserialize.h" #include "llwlparammanager.h" +#include "llweb.h" #include "llviewerwindow.h" @@ -57,10 +58,7 @@ void LLWLDayCycle::loadDayCycle(const std::string & fileName) mTimeMap.clear(); // bugfix for SL-46920: preventing filenames that break stuff. - char * curl_str = curl_escape(fileName.c_str(), fileName.size()); - std::string escaped_filename(curl_str); - curl_free(curl_str); - curl_str = NULL; + std::string escaped_filename = LLWeb::curlEscape(fileName); escaped_filename += ".xml"; @@ -125,10 +123,7 @@ void LLWLDayCycle::saveDayCycle(const std::string & fileName) { // bugfix for SL-46920: preventing filenames that break stuff. - char * curl_str = curl_escape(fileName.c_str(), fileName.size()); - std::string escaped_filename(curl_str); - curl_free(curl_str); - curl_str = NULL; + std::string escaped_filename = LLWeb::curlEscape(fileName); escaped_filename += ".xml"; diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp index dfe921667..bb41f9aac 100644 --- a/indra/newview/llwlparammanager.cpp +++ b/indra/newview/llwlparammanager.cpp @@ -187,10 +187,7 @@ void LLWLParamManager::loadPreset(const std::string & name,bool propagate) { // bugfix for SL-46920: preventing filenames that break stuff. - char * curl_str = curl_escape(name.c_str(), name.size()); - std::string escaped_filename(curl_str); - curl_free(curl_str); - curl_str = NULL; + std::string escaped_filename = LLWeb::curlEscape(name); escaped_filename += ".xml"; @@ -244,10 +241,7 @@ void LLWLParamManager::loadPreset(const std::string & name,bool propagate) void LLWLParamManager::savePreset(const std::string & name) { // bugfix for SL-46920: preventing filenames that break stuff. - char * curl_str = curl_escape(name.c_str(), name.size()); - std::string escaped_filename(curl_str); - curl_free(curl_str); - curl_str = NULL; + std::string escaped_filename = LLWeb::curlEscape(name); escaped_filename += ".xml"; @@ -531,10 +525,7 @@ bool LLWLParamManager::removeParamSet(const std::string& name, bool delete_from_ std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", "")); // use full curl escaped name - char * curl_str = curl_escape(name.c_str(), name.size()); - std::string escaped_name(curl_str); - curl_free(curl_str); - curl_str = NULL; + std::string escaped_name = LLWeb::curlEscape(name); gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml"); } From c0c786b39f16e6900df4a902c7ed4d8b04043503 Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Mon, 2 May 2011 20:50:26 +0200 Subject: [PATCH 08/44] Make loading prebuilts work. Copied indra/cmake/Prebuilt.cmake from imprudence, which fixed this issue. --- indra/cmake/Prebuilt.cmake | 47 ++++++++++++++++++++++++++++++++------ install.xml | 7 ++++++ 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake index 6dd9c47bd..a91519278 100644 --- a/indra/cmake/Prebuilt.cmake +++ b/indra/cmake/Prebuilt.cmake @@ -1,11 +1,44 @@ # -*- cmake -*- +include(Python) +include(FindSCP) + macro (use_prebuilt_binary _binary) - if(NOT STANDALONE) - get_property(PREBUILT_PACKAGES TARGET prepare PROPERTY PREBUILT) - list(FIND PREBUILT_PACKAGES ${_binary} _index) - if(_index LESS 0) - set_property(TARGET prepare APPEND PROPERTY PREBUILT ${_binary}) - endif(_index LESS 0) - endif(NOT STANDALONE) + if (NOT STANDALONE) + if(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed) + if(INSTALL_PROPRIETARY) + include(FindSCP) + if(DEBUG_PREBUILT) + message("cd ${SCRIPTS_DIR} && ${PYTHON_EXECUTABLE} install.py --install-dir=${CMAKE_SOURCE_DIR}/.. --scp=${SCP_EXECUTABLE} ${_binary}") + endif(DEBUG_PREBUILT) + execute_process(COMMAND ${PYTHON_EXECUTABLE} + install.py + --install-dir=${CMAKE_SOURCE_DIR}/.. + --scp=${SCP_EXECUTABLE} + ${_binary} + WORKING_DIRECTORY ${SCRIPTS_DIR} + RESULT_VARIABLE ${_binary}_installed + ) + else(INSTALL_PROPRIETARY) + if(DEBUG_PREBUILT) + message("cd ${SCRIPTS_DIR} && ${PYTHON_EXECUTABLE} install.py --install-dir=${CMAKE_SOURCE_DIR}/.. ${_binary}") + endif(DEBUG_PREBUILT) + execute_process(COMMAND ${PYTHON_EXECUTABLE} + install.py + --install-dir=${CMAKE_SOURCE_DIR}/.. + ${_binary} + WORKING_DIRECTORY ${SCRIPTS_DIR} + RESULT_VARIABLE ${_binary}_installed + ) + endif(INSTALL_PROPRIETARY) + file(WRITE ${CMAKE_BINARY_DIR}/temp/${_binary}_installed "${${_binary}_installed}") + else(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed) + set(${_binary}_installed 0) + endif(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed) + if(NOT ${_binary}_installed EQUAL 0) + message(FATAL_ERROR + "Failed to download or unpack prebuilt '${_binary}'." + " Process returned ${${_binary}_installed}.") + endif (NOT ${_binary}_installed EQUAL 0) + endif (NOT STANDALONE) endmacro (use_prebuilt_binary _binary) diff --git a/install.xml b/install.xml index 2ea504fe5..2b31c307a 100644 --- a/install.xml +++ b/install.xml @@ -1331,6 +1331,13 @@ anguage Infrstructure (CLI) international standard url http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-2.1.3010.6270-linux-20090309.tar.bz2 + linux64 + + md5sum + 01573510dce7f380f44e561ef2f3dd9f + url + http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-2.1.3010.6270-linux-20090309.tar.bz2 + windows md5sum From 6848c2df6f0e699aba92284fa4c9d18c7bf807c5 Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Mon, 2 May 2011 23:13:15 +0200 Subject: [PATCH 09/44] Fix underlinkage of libmedia_plugin_webkit.so Fixed by updating indra/cmake/WebKitLibPlugin.cmake with version from imprudence. This commit also contains removal of execute permissions of source files and configure files, sorry... --- indra/cmake/WebKitLibPlugin.cmake | 61 +++++++++++++------ indra/llcrashlogger/llcrashlogger.cpp | 0 indra/llcrashlogger/llcrashlogger.h | 0 indra/llmessage/llsdmessagebuilder.cpp | 0 indra/llmessage/llsdmessagebuilder.h | 0 indra/llmessage/llsdmessagereader.cpp | 0 indra/llmessage/llsdmessagereader.h | 0 indra/llplugin/llpluginclassmedia.cpp | 0 indra/llplugin/llpluginclassmedia.h | 0 indra/llplugin/llpluginclassmediaowner.h | 0 indra/llplugin/llplugininstance.cpp | 0 indra/llplugin/llplugininstance.h | 0 indra/llplugin/llpluginmessage.cpp | 0 indra/llplugin/llpluginmessage.h | 0 indra/llplugin/llpluginmessageclasses.h | 0 indra/llplugin/llpluginmessagepipe.cpp | 0 indra/llplugin/llpluginmessagepipe.h | 0 indra/llplugin/llpluginprocesschild.cpp | 0 indra/llplugin/llpluginprocesschild.h | 0 indra/llplugin/llpluginprocessparent.cpp | 0 indra/llplugin/llpluginprocessparent.h | 0 indra/llplugin/llpluginsharedmemory.cpp | 0 indra/llplugin/llpluginsharedmemory.h | 0 indra/llplugin/slplugin/slplugin.cpp | 0 indra/llui/llmemberlistener.h | 0 indra/llui/lluistring.cpp | 0 indra/llui/lluistring.h | 0 indra/llvfs/llpidlock.cpp | 0 indra/llvfs/llpidlock.h | 0 indra/llwindow/glh/glh_linear.h | 0 indra/media_plugins/CMakeLists.txt | 0 .../media_plugins/base/media_plugin_base.cpp | 0 indra/media_plugins/base/media_plugin_base.h | 0 .../example/media_plugin_example.cpp | 0 indra/media_plugins/quicktime/CMakeLists.txt | 0 .../quicktime/media_plugin_quicktime.cpp | 0 indra/media_plugins/webkit/CMakeLists.txt | 0 .../webkit/dummy_volume_catcher.cpp | 0 .../webkit/linux_volume_catcher.cpp | 0 .../webkit/linux_volume_catcher_pa_syms.inc | 0 .../linux_volume_catcher_paglib_syms.inc | 0 .../webkit/mac_volume_catcher.cpp | 0 .../webkit/media_plugin_webkit.cpp | 0 indra/media_plugins/webkit/volume_catcher.h | 0 .../webkit/windows_volume_catcher.cpp | 0 indra/newview/hippofloaterxml.cpp | 0 indra/newview/hippofloaterxml.h | 0 indra/newview/llfloatersellland.cpp | 0 indra/newview/llfloatersellland.h | 0 indra/newview/llinventorybridge.h | 0 indra/newview/lltoolpipette.cpp | 0 indra/newview/lltoolpipette.h | 0 indra/newview/llviewerobjectbackup.cpp | 0 indra/newview/llviewerobjectbackup.h | 0 indra/test/llrandom_tut.cpp | 0 indra/test/llsdmessagebuilder_tut.cpp | 0 indra/test/llsdmessagereader_tut.cpp | 0 indra/test_apps/llplugintest/CMakeLists.txt | 0 indra/test_apps/llplugintest/bookmarks.txt | 0 .../llplugintest/demo_media_plugin.cpp | 0 .../llplugintest/demo_media_plugin_2.cpp | 0 indra/test_apps/llplugintest/demo_plugin.cpp | 0 .../llplugintest/llmediaplugintest.cpp | 0 .../llplugintest/llmediaplugintest.h | 0 .../test_apps/llplugintest/media_mappings.txt | 0 .../llplugintest/media_plugin_test.cpp | 0 .../llplugintest/media_simple_test.cpp | 0 indra/test_apps/llplugintest/plugin_host.cpp | 0 .../llplugintest/plugin_process_launcher.cpp | 0 69 files changed, 42 insertions(+), 19 deletions(-) mode change 100755 => 100644 indra/llcrashlogger/llcrashlogger.cpp mode change 100755 => 100644 indra/llcrashlogger/llcrashlogger.h mode change 100755 => 100644 indra/llmessage/llsdmessagebuilder.cpp mode change 100755 => 100644 indra/llmessage/llsdmessagebuilder.h mode change 100755 => 100644 indra/llmessage/llsdmessagereader.cpp mode change 100755 => 100644 indra/llmessage/llsdmessagereader.h mode change 100755 => 100644 indra/llplugin/llpluginclassmedia.cpp mode change 100755 => 100644 indra/llplugin/llpluginclassmedia.h mode change 100755 => 100644 indra/llplugin/llpluginclassmediaowner.h mode change 100755 => 100644 indra/llplugin/llplugininstance.cpp mode change 100755 => 100644 indra/llplugin/llplugininstance.h mode change 100755 => 100644 indra/llplugin/llpluginmessage.cpp mode change 100755 => 100644 indra/llplugin/llpluginmessage.h mode change 100755 => 100644 indra/llplugin/llpluginmessageclasses.h mode change 100755 => 100644 indra/llplugin/llpluginmessagepipe.cpp mode change 100755 => 100644 indra/llplugin/llpluginmessagepipe.h mode change 100755 => 100644 indra/llplugin/llpluginprocesschild.cpp mode change 100755 => 100644 indra/llplugin/llpluginprocesschild.h mode change 100755 => 100644 indra/llplugin/llpluginprocessparent.cpp mode change 100755 => 100644 indra/llplugin/llpluginprocessparent.h mode change 100755 => 100644 indra/llplugin/llpluginsharedmemory.cpp mode change 100755 => 100644 indra/llplugin/llpluginsharedmemory.h mode change 100755 => 100644 indra/llplugin/slplugin/slplugin.cpp mode change 100755 => 100644 indra/llui/llmemberlistener.h mode change 100755 => 100644 indra/llui/lluistring.cpp mode change 100755 => 100644 indra/llui/lluistring.h mode change 100755 => 100644 indra/llvfs/llpidlock.cpp mode change 100755 => 100644 indra/llvfs/llpidlock.h mode change 100755 => 100644 indra/llwindow/glh/glh_linear.h mode change 100755 => 100644 indra/media_plugins/CMakeLists.txt mode change 100755 => 100644 indra/media_plugins/base/media_plugin_base.cpp mode change 100755 => 100644 indra/media_plugins/base/media_plugin_base.h mode change 100755 => 100644 indra/media_plugins/example/media_plugin_example.cpp mode change 100755 => 100644 indra/media_plugins/quicktime/CMakeLists.txt mode change 100755 => 100644 indra/media_plugins/quicktime/media_plugin_quicktime.cpp mode change 100755 => 100644 indra/media_plugins/webkit/CMakeLists.txt mode change 100755 => 100644 indra/media_plugins/webkit/dummy_volume_catcher.cpp mode change 100755 => 100644 indra/media_plugins/webkit/linux_volume_catcher.cpp mode change 100755 => 100644 indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc mode change 100755 => 100644 indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc mode change 100755 => 100644 indra/media_plugins/webkit/mac_volume_catcher.cpp mode change 100755 => 100644 indra/media_plugins/webkit/media_plugin_webkit.cpp mode change 100755 => 100644 indra/media_plugins/webkit/volume_catcher.h mode change 100755 => 100644 indra/media_plugins/webkit/windows_volume_catcher.cpp mode change 100755 => 100644 indra/newview/hippofloaterxml.cpp mode change 100755 => 100644 indra/newview/hippofloaterxml.h mode change 100755 => 100644 indra/newview/llfloatersellland.cpp mode change 100755 => 100644 indra/newview/llfloatersellland.h mode change 100755 => 100644 indra/newview/llinventorybridge.h mode change 100755 => 100644 indra/newview/lltoolpipette.cpp mode change 100755 => 100644 indra/newview/lltoolpipette.h mode change 100755 => 100644 indra/newview/llviewerobjectbackup.cpp mode change 100755 => 100644 indra/newview/llviewerobjectbackup.h mode change 100755 => 100644 indra/test/llrandom_tut.cpp mode change 100755 => 100644 indra/test/llsdmessagebuilder_tut.cpp mode change 100755 => 100644 indra/test/llsdmessagereader_tut.cpp mode change 100755 => 100644 indra/test_apps/llplugintest/CMakeLists.txt mode change 100755 => 100644 indra/test_apps/llplugintest/bookmarks.txt mode change 100755 => 100644 indra/test_apps/llplugintest/demo_media_plugin.cpp mode change 100755 => 100644 indra/test_apps/llplugintest/demo_media_plugin_2.cpp mode change 100755 => 100644 indra/test_apps/llplugintest/demo_plugin.cpp mode change 100755 => 100644 indra/test_apps/llplugintest/llmediaplugintest.cpp mode change 100755 => 100644 indra/test_apps/llplugintest/llmediaplugintest.h mode change 100755 => 100644 indra/test_apps/llplugintest/media_mappings.txt mode change 100755 => 100644 indra/test_apps/llplugintest/media_plugin_test.cpp mode change 100755 => 100644 indra/test_apps/llplugintest/media_simple_test.cpp mode change 100755 => 100644 indra/test_apps/llplugintest/plugin_host.cpp mode change 100755 => 100644 indra/test_apps/llplugintest/plugin_process_launcher.cpp diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake index 44f5619e1..a4befa495 100644 --- a/indra/cmake/WebKitLibPlugin.cmake +++ b/indra/cmake/WebKitLibPlugin.cmake @@ -3,7 +3,29 @@ include(Linking) include(Prebuilt) if (STANDALONE) - find_package(LLQtWebkit REQUIRED) + # The minimal version, 4.4.3, is rather arbitrary: it's the version in Debian/Lenny. + find_package(Qt4 4.4.3 COMPONENTS QtCore QtGui QtNetwork QtOpenGL QtWebKit REQUIRED) + include(${QT_USE_FILE}) + set(QTDIR $ENV{QTDIR}) + if (QTDIR AND NOT "${QT_BINARY_DIR}" STREQUAL "${QTDIR}/bin") + message(FATAL_ERROR "\"${QT_BINARY_DIR}\" is unequal \"${QTDIR}/bin\"; " + "Qt is found by looking for qmake in your PATH. " + "Please set your PATH such that 'qmake' is found in \$QTDIR/bin, " + "or unset QTDIR if the found Qt is correct.") + endif (QTDIR AND NOT "${QT_BINARY_DIR}" STREQUAL "${QTDIR}/bin") + find_package(LLQtWebkit REQUIRED QUIET) + # Add the plugins. + set(QT_PLUGIN_LIBRARIES) + foreach(qlibname qgif qjpeg) + find_library(QT_PLUGIN_${qlibname} ${qlibname} PATHS ${QT_PLUGINS_DIR}/imageformats NO_DEFAULT_PATH) + if (QT_PLUGIN_${qlibname}) + list(APPEND QT_PLUGIN_LIBRARIES ${QT_PLUGIN_${qlibname}}) + else (QT_PLUGIN_${qtlibname}) + message(FATAL_ERROR "Could not find the Qt plugin ${qlibname} in \"${QT_PLUGINS_DIR}/imageformats\"!") + endif (QT_PLUGIN_${qlibname}) + endforeach(qlibname) + # qjpeg depends on libjpeg + list(APPEND QT_PLUGIN_LIBRARIES jpeg) set(WEBKITLIBPLUGIN OFF CACHE BOOL "WEBKITLIBPLUGIN support for the llplugin/llmedia test apps.") else (STANDALONE) @@ -32,25 +54,26 @@ if (WINDOWS) elseif (DARWIN) set(WEBKIT_PLUGIN_LIBRARIES optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib - debug ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib + debug ${ARCH_PREBUILT_DIRS_DEBUG}/libllqtwebkit.dylib ) elseif (LINUX) - if (STANDALONE) - set(WEBKIT_PLUGIN_LIBRARIES ${LLQTWEBKIT_LIBRARY}) - else (STANDALONE) + if (STANDALONE) + set(WEBKIT_PLUGIN_LIBRARIES ${LLQTWEBKIT_LIBRARY} ${QT_LIBRARIES} ${QT_PLUGIN_LIBRARIES}) + else (STANDALONE) set(WEBKIT_PLUGIN_LIBRARIES - llqtwebkit - qgif - qjpeg - QtWebKit - QtOpenGL - QtNetwork - QtGui - QtCore - fontconfig - X11 - Xrender - GL - ) - endif (STANDALONE) + llqtwebkit + qgif + qjpeg + QtWebKit + QtOpenGL + QtNetwork + QtGui + QtCore + jpeg + fontconfig + X11 + Xrender + GL + ) + endif (STANDALONE) endif (WINDOWS) diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp old mode 100755 new mode 100644 diff --git a/indra/llcrashlogger/llcrashlogger.h b/indra/llcrashlogger/llcrashlogger.h old mode 100755 new mode 100644 diff --git a/indra/llmessage/llsdmessagebuilder.cpp b/indra/llmessage/llsdmessagebuilder.cpp old mode 100755 new mode 100644 diff --git a/indra/llmessage/llsdmessagebuilder.h b/indra/llmessage/llsdmessagebuilder.h old mode 100755 new mode 100644 diff --git a/indra/llmessage/llsdmessagereader.cpp b/indra/llmessage/llsdmessagereader.cpp old mode 100755 new mode 100644 diff --git a/indra/llmessage/llsdmessagereader.h b/indra/llmessage/llsdmessagereader.h old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h old mode 100755 new mode 100644 diff --git a/indra/llplugin/llplugininstance.cpp b/indra/llplugin/llplugininstance.cpp old mode 100755 new mode 100644 diff --git a/indra/llplugin/llplugininstance.h b/indra/llplugin/llplugininstance.h old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginmessage.cpp b/indra/llplugin/llpluginmessage.cpp old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginmessage.h b/indra/llplugin/llpluginmessage.h old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginmessageclasses.h b/indra/llplugin/llpluginmessageclasses.h old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginmessagepipe.cpp b/indra/llplugin/llpluginmessagepipe.cpp old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginmessagepipe.h b/indra/llplugin/llpluginmessagepipe.h old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginprocesschild.h b/indra/llplugin/llpluginprocesschild.h old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginprocessparent.h b/indra/llplugin/llpluginprocessparent.h old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginsharedmemory.cpp b/indra/llplugin/llpluginsharedmemory.cpp old mode 100755 new mode 100644 diff --git a/indra/llplugin/llpluginsharedmemory.h b/indra/llplugin/llpluginsharedmemory.h old mode 100755 new mode 100644 diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp old mode 100755 new mode 100644 diff --git a/indra/llui/llmemberlistener.h b/indra/llui/llmemberlistener.h old mode 100755 new mode 100644 diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp old mode 100755 new mode 100644 diff --git a/indra/llui/lluistring.h b/indra/llui/lluistring.h old mode 100755 new mode 100644 diff --git a/indra/llvfs/llpidlock.cpp b/indra/llvfs/llpidlock.cpp old mode 100755 new mode 100644 diff --git a/indra/llvfs/llpidlock.h b/indra/llvfs/llpidlock.h old mode 100755 new mode 100644 diff --git a/indra/llwindow/glh/glh_linear.h b/indra/llwindow/glh/glh_linear.h old mode 100755 new mode 100644 diff --git a/indra/media_plugins/CMakeLists.txt b/indra/media_plugins/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/indra/media_plugins/base/media_plugin_base.cpp b/indra/media_plugins/base/media_plugin_base.cpp old mode 100755 new mode 100644 diff --git a/indra/media_plugins/base/media_plugin_base.h b/indra/media_plugins/base/media_plugin_base.h old mode 100755 new mode 100644 diff --git a/indra/media_plugins/example/media_plugin_example.cpp b/indra/media_plugins/example/media_plugin_example.cpp old mode 100755 new mode 100644 diff --git a/indra/media_plugins/quicktime/CMakeLists.txt b/indra/media_plugins/quicktime/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp old mode 100755 new mode 100644 diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/indra/media_plugins/webkit/dummy_volume_catcher.cpp b/indra/media_plugins/webkit/dummy_volume_catcher.cpp old mode 100755 new mode 100644 diff --git a/indra/media_plugins/webkit/linux_volume_catcher.cpp b/indra/media_plugins/webkit/linux_volume_catcher.cpp old mode 100755 new mode 100644 diff --git a/indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc b/indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc old mode 100755 new mode 100644 diff --git a/indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc b/indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc old mode 100755 new mode 100644 diff --git a/indra/media_plugins/webkit/mac_volume_catcher.cpp b/indra/media_plugins/webkit/mac_volume_catcher.cpp old mode 100755 new mode 100644 diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp old mode 100755 new mode 100644 diff --git a/indra/media_plugins/webkit/volume_catcher.h b/indra/media_plugins/webkit/volume_catcher.h old mode 100755 new mode 100644 diff --git a/indra/media_plugins/webkit/windows_volume_catcher.cpp b/indra/media_plugins/webkit/windows_volume_catcher.cpp old mode 100755 new mode 100644 diff --git a/indra/newview/hippofloaterxml.cpp b/indra/newview/hippofloaterxml.cpp old mode 100755 new mode 100644 diff --git a/indra/newview/hippofloaterxml.h b/indra/newview/hippofloaterxml.h old mode 100755 new mode 100644 diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp old mode 100755 new mode 100644 diff --git a/indra/newview/llfloatersellland.h b/indra/newview/llfloatersellland.h old mode 100755 new mode 100644 diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h old mode 100755 new mode 100644 diff --git a/indra/newview/lltoolpipette.cpp b/indra/newview/lltoolpipette.cpp old mode 100755 new mode 100644 diff --git a/indra/newview/lltoolpipette.h b/indra/newview/lltoolpipette.h old mode 100755 new mode 100644 diff --git a/indra/newview/llviewerobjectbackup.cpp b/indra/newview/llviewerobjectbackup.cpp old mode 100755 new mode 100644 diff --git a/indra/newview/llviewerobjectbackup.h b/indra/newview/llviewerobjectbackup.h old mode 100755 new mode 100644 diff --git a/indra/test/llrandom_tut.cpp b/indra/test/llrandom_tut.cpp old mode 100755 new mode 100644 diff --git a/indra/test/llsdmessagebuilder_tut.cpp b/indra/test/llsdmessagebuilder_tut.cpp old mode 100755 new mode 100644 diff --git a/indra/test/llsdmessagereader_tut.cpp b/indra/test/llsdmessagereader_tut.cpp old mode 100755 new mode 100644 diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/indra/test_apps/llplugintest/bookmarks.txt b/indra/test_apps/llplugintest/bookmarks.txt old mode 100755 new mode 100644 diff --git a/indra/test_apps/llplugintest/demo_media_plugin.cpp b/indra/test_apps/llplugintest/demo_media_plugin.cpp old mode 100755 new mode 100644 diff --git a/indra/test_apps/llplugintest/demo_media_plugin_2.cpp b/indra/test_apps/llplugintest/demo_media_plugin_2.cpp old mode 100755 new mode 100644 diff --git a/indra/test_apps/llplugintest/demo_plugin.cpp b/indra/test_apps/llplugintest/demo_plugin.cpp old mode 100755 new mode 100644 diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp old mode 100755 new mode 100644 diff --git a/indra/test_apps/llplugintest/llmediaplugintest.h b/indra/test_apps/llplugintest/llmediaplugintest.h old mode 100755 new mode 100644 diff --git a/indra/test_apps/llplugintest/media_mappings.txt b/indra/test_apps/llplugintest/media_mappings.txt old mode 100755 new mode 100644 diff --git a/indra/test_apps/llplugintest/media_plugin_test.cpp b/indra/test_apps/llplugintest/media_plugin_test.cpp old mode 100755 new mode 100644 diff --git a/indra/test_apps/llplugintest/media_simple_test.cpp b/indra/test_apps/llplugintest/media_simple_test.cpp old mode 100755 new mode 100644 diff --git a/indra/test_apps/llplugintest/plugin_host.cpp b/indra/test_apps/llplugintest/plugin_host.cpp old mode 100755 new mode 100644 diff --git a/indra/test_apps/llplugintest/plugin_process_launcher.cpp b/indra/test_apps/llplugintest/plugin_process_launcher.cpp old mode 100755 new mode 100644 From ccaa494e853704ca221f2faa6060e4916bb69d3d Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Wed, 4 May 2011 15:52:25 +0200 Subject: [PATCH 10/44] Updated doc/contributions.txt and added various missing patches from imprudence. This updates the source tree with patches that I committed to imprudence up till and including 2010-10-19. --- doc/contributions.txt | 47 +++++++++---- indra/cmake/CMakeLists.txt | 1 - indra/cmake/FindMyZLIB.cmake | 46 ------------- indra/cmake/UI.cmake | 1 + indra/cmake/ZLIB.cmake | 2 +- indra/newview/llappviewer.cpp | 10 --- indra/newview/llfloaterabout.cpp | 2 +- indra/newview/llselectmgr.h | 2 +- indra/newview/viewer_manifest.py | 17 ----- install.xml | 114 ------------------------------- 10 files changed, 36 insertions(+), 206 deletions(-) delete mode 100644 indra/cmake/FindMyZLIB.cmake diff --git a/doc/contributions.txt b/doc/contributions.txt index 6c39a77dd..b13dba64c 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -4,6 +4,10 @@ along with the issue identifier corresponding to the patches we've received from them. To see more about these contributions, visit the browsable version: http://wiki.secondlife.com/wiki/Source_contributions +Entries are related to URLs as follows: +IMP-xxx: http://redmine.kokuaviewer.org/issues/xxx +Everything else ([VWR|SNOW|CT|SVC|WEB]-xxx): https://jira.secondlife.com/browse/KEY-xxx + Able Whitman VWR-650 VWR-1460 @@ -60,7 +64,9 @@ Alejandro Rosenthal Aleric Inglewood VWR-10759 VWR-10837 + VWR-12838 (IMP-552) VWR-12984 + VWR-13040 (IMP-575) VWR-13996 VWR-14426 VWR-14914 @@ -72,18 +78,28 @@ Aleric Inglewood SNOW-129 SNOW-196 SNOW-203 + SNOW-240 SNOW-408 - SNOW-415 + SNOW-415 (IMP-576) + SNOW-477 (IMP-577) SNOW-479 SNOW-626 SNOW-713 - SNOW-744 - SNOW-751 + SNOW-744 (IMP-578) SNOW-752 SNOW-753 + SNOW-766 (IMP-553) SNOW-772 SNOW-793 + SNOW-796 (IMP-581) + SNOW-800 (IMP-556) SNOW-806 + IMP-429 + IMP-561 + IMP-565 + IMP-566 + IMP-567 + IMP-573 Alissa Sabre VWR-81 VWR-83 @@ -105,7 +121,7 @@ Alissa Sabre VWR-1351 VWR-1353 VWR-1410 - VWR-1843 + VWR-1843 VWR-2116 VWR-2826 VWR-3290 @@ -113,17 +129,17 @@ Alissa Sabre VWR-3857 VWR-4010 VWR-5575 - VWR-5929 - VWR-6384 - VWR-6385 + VWR-5929 + VWR-6384 + VWR-6385 VWR-6386 - VWR-6430 + VWR-6430 VWR-6858 - VWR-6668 - VWR-7086 - VWR-7087 - VWR-7153 - VWR-7168 + VWR-6668 + VWR-7086 + VWR-7087 + VWR-7153 + VWR-7168 VWR-9190 VWR-10728 VWR-12620 @@ -181,6 +197,7 @@ Boroondas Gupte SNOW-201 SNOW-396 SNOW-589 + SNOW-623 (IMP-554) SNOW-624 VWR-233 WEB-262 @@ -549,7 +566,7 @@ Pf Shan CT-321 princess niven VWR-5733 - CT-85 + CT-85 CT-320 CT-352 Renault Clio @@ -590,6 +607,7 @@ Robin Cornelius VWR-11128 VWR-12758 VWR-12686 + VWR-12838 Ryozu Kojima VWR-53 VWR-287 @@ -788,4 +806,3 @@ Zi Ree Zipherius Turas VWR-76 VWR-77 - diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt index 6b9e342f4..b7ec75f54 100644 --- a/indra/cmake/CMakeLists.txt +++ b/indra/cmake/CMakeLists.txt @@ -35,7 +35,6 @@ set(cmake_SOURCE_FILES FindNDOF.cmake FindOpenJPEG.cmake FindXmlRpcEpi.cmake - FindMyZLIB.cmake FMOD.cmake FreeType.cmake GStreamer010Plugin.cmake diff --git a/indra/cmake/FindMyZLIB.cmake b/indra/cmake/FindMyZLIB.cmake deleted file mode 100644 index 6d630f1ba..000000000 --- a/indra/cmake/FindMyZLIB.cmake +++ /dev/null @@ -1,46 +0,0 @@ -# -*- cmake -*- - -# - Find zlib -# Find the ZLIB includes and library -# This module defines -# ZLIB_INCLUDE_DIRS, where to find zlib.h, etc. -# ZLIB_LIBRARIES, the libraries needed to use zlib. -# ZLIB_FOUND, If false, do not try to use zlib. -# -# This FindZLIB is about 43 times as fast the one provided with cmake (2.8.x), -# because it doesn't look up the version of zlib, resulting in a dramatic -# speed up for configure (from 4 minutes 22 seconds to 6 seconds). -# -# Note: Since this file is only used for standalone, the windows -# specific parts were left out. - -FIND_PATH(ZLIB_INCLUDE_DIR zlib.h - NO_SYSTEM_ENVIRONMENT_PATH - ) - -FIND_LIBRARY(ZLIB_LIBRARY z) - -if (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) - SET(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR}) - SET(ZLIB_LIBRARIES ${ZLIB_LIBRARY}) - SET(ZLIB_FOUND "YES") -else (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) - SET(ZLIB_FOUND "NO") -endif (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) - -if (ZLIB_FOUND) - if (NOT ZLIB_FIND_QUIETLY) - message(STATUS "Found ZLIB: ${ZLIB_LIBRARIES}") - SET(ZLIB_FIND_QUIETLY TRUE) - endif (NOT ZLIB_FIND_QUIETLY) -else (ZLIB_FOUND) - if (ZLIB_FIND_REQUIRED) - message(FATAL_ERROR "Could not find ZLIB library") - endif (ZLIB_FIND_REQUIRED) -endif (ZLIB_FOUND) - -mark_as_advanced( - ZLIB_LIBRARY - ZLIB_INCLUDE_DIR - ) - diff --git a/indra/cmake/UI.cmake b/indra/cmake/UI.cmake index 6067602d5..64fa85ff2 100644 --- a/indra/cmake/UI.cmake +++ b/indra/cmake/UI.cmake @@ -42,6 +42,7 @@ else (STANDALONE) gdk_pixbuf-2.0 Xinerama glib-2.0 + gio-2.0 gmodule-2.0 gobject-2.0 gthread-2.0 diff --git a/indra/cmake/ZLIB.cmake b/indra/cmake/ZLIB.cmake index c233b3eec..48e5130ad 100644 --- a/indra/cmake/ZLIB.cmake +++ b/indra/cmake/ZLIB.cmake @@ -6,7 +6,7 @@ set(ZLIB_FIND_REQUIRED ON) include(Prebuilt) if (STANDALONE) - include(FindMyZLIB) + include(FindZLIB) else (STANDALONE) use_prebuilt_binary(zlib) if (WINDOWS) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 38ae9202e..10f52bf45 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1120,16 +1120,6 @@ bool LLAppViewer::mainLoop() bool LLAppViewer::cleanup() { - //---------------------------------------------- - //this test code will be removed after the test - //test manual call stack tracer - if(gSavedSettings.getBOOL("QAMode")) - { - LLError::LLCallStacks::print() ; - } - //end of the test code - //---------------------------------------------- - //flag all elements as needing to be destroyed immediately // to ensure shutdown order LLMortician::setZealous(TRUE); diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index 043de9c23..ed4e378e3 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -275,7 +275,7 @@ LLFloaterAbout::LLFloaterAbout() // TODO: Implement media plugin version query - support.append("Qt Webkit Version: 4.7.1 "); + support.append("Qt Webkit Version: 4.7.1 (version number hard-coded)"); support.append("\n"); if (gPacketsIn > 0) diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 52d3f0b03..1ebe341bf 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -252,7 +252,7 @@ public: return (object != NULL) && node->mValid && !node->mIndividualSelection && (object->isRootEdit() || object->isJointChild()); } }; - typedef boost::filter_iterator valid_root_iterator; + typedef boost::filter_iterator valid_root_iterator; valid_root_iterator valid_root_begin() { return valid_root_iterator(mList.begin(), mList.end()); } valid_root_iterator valid_root_end() { return valid_root_iterator(mList.end(), mList.end()); } diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 02eca9bff..03f8c71ac 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -827,25 +827,8 @@ class Linux_x86_64Manifest(LinuxManifest): self.path("libopenal.so.1") self.path("libalut.so.0") - # GTK+ and dependencies - ## Lets just use the system libraries for all of these: - ##self.path("libatk-1.0.so.0") - ##self.path("libcairo.so.2") - ##self.path("libfontconfig.so.1") - ##self.path("libfreetype.so.6") - self.path("libgdk_pixbuf-2.0.so.0") # was commented to use systems gdk pixbufs instead - - # but seems webkit needs it o_O . Packaging for testing now. - ##self.path("libgdk-x11-2.0.so.0") - ##self.path("libgtk-x11-2.0.so.0") -# self.path("libpango-1.0.so.0") # use systems pango instead -# self.path("libpangoft2-1.0.so.0") # Both gdk pixbufs and pango would load systems modules -# self.path("libpangox-1.0.so.0") # and crash if not compatible or present. -# self.path("libpangoxft-1.0.so.0") # So we depend system gdk pixbufs and pango anyway. - ##self.path("libpixman-1.so.0") - self.end_prefix("lib64") - # Vivox runtimes and libs if self.prefix(src="vivox-runtime/i686-linux", dst="bin"): self.path("SLVoice") diff --git a/install.xml b/install.xml index 2b31c307a..fc920198b 100644 --- a/install.xml +++ b/install.xml @@ -374,39 +374,6 @@ - fmod - - copyright - FMOD Sound System, copyright (C) Firelight Technologies Pty, Ltd., 1994-2006. - description - Audio engine and mp3 stream decoder . - license - fmod - packages - - darwin - - md5sum - c7e317bec481b7efa2a0319e163dcc65 - url - scp:install-packages.lindenlab.com:/local/www/install-packages/doc/fmod-3.75-darwin-20080818.tar.bz2 - - linux - - md5sum - abd2b4ba4ac993f19d82804af387eb7c - url - scp:install-packages.lindenlab.com:/local/www/install-packages/doc/fmod-3.75-linux-20080818.tar.bz2 - - windows - - md5sum - 1a55dec2907821f5f785648a660126c3 - url - scp:install-packages.lindenlab.com:/local/www/install-packages/doc/fmod-3.75-windows-20080611.tar.bz2 - - - fontconfig license @@ -1015,35 +982,6 @@ anguage Infrstructure (CLI) international standard - mysql - - license - gpl - packages - - darwin - - md5sum - df27f2db244ea2762759a06cd75ada4e - url - scp:install-packages.lindenlab.com:/local/www/install-packages/doc/mysql-darwin-20080812.tar.bz2 - - linux - - md5sum - cc86b4cc858655e23704d1168325d7b9 - url - scp:install-packages.lindenlab.com:/local/www/install-packages/doc/mysqlclient-linux-20090320.tar.bz2 - - windows - - md5sum - 98bac06680dca907e783d8dd4aa9edde - url - scp:install-packages.lindenlab.com:/local/www/install-packages/doc/mysql-windows-20080804.tar.bz2 - - - ndofdev copyright @@ -1219,58 +1157,6 @@ anguage Infrstructure (CLI) international standard - quicktime - - copyright - Copyright (C) 1990-2007 by Apple Computer, Inc., all rights reserved. - description - Separate download. Used to play in-world video clips on a prim. - license - quicktime - packages - - windows - - md5sum - be45825cc14ede53790ac93c58307dcb - url - scp:install-packages.lindenlab.com:/local/www/install-packages/doc/quicktime-sdk-windows-7.3-20091110.tar.bz2 - - - - smartheap - - copyright - Copyright (C) 1991-2000 Compuware Corporation. All Rights Reserved. - description - Memory Management Library - license - smartheap - packages - - darwin - - md5sum - f54131b5f228e805c64c2e4e6c96579a - url - scp:install-packages.lindenlab.com:/local/www/install-packages/doc/smartheap-6.0.2-darwin-20080610.tar.bz2 - - linux - - md5sum - 499208522bf7d7843e1d014d64214e06 - url - scp:install-packages.lindenlab.com:/local/www/install-packages/doc/smartheap-6.0.2-linux-20080610.tar.bz2 - - windows - - md5sum - 78fd47017f21d11eae43bca3e38a3e1e - url - scp:install-packages.lindenlab.com:/local/www/install-packages/doc/smartheap-6.0.2-windows-20080611.tar.bz2 - - - tut copyright From ab5915c16cdef65f170edb855094ef1ccbd4832e Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Wed, 4 May 2011 17:54:57 +0200 Subject: [PATCH 11/44] LindenUserDir fixes. Patch from 2010-10-20/22. Didn't apply cleanly so I redid it manually and tested/checked it. There was only one difference with imprudence: for some reason Singularity tries to see if the "teleport history" floater is visible while initializing the menu's, something that imprudence doesn't do. For the rest the patch is basically the same. Nevertheless, I left all code exactly as it was in Singularity (the only thing that this commit changes is the intend of the original patch: in debug mode, fail with an assertion when LindenUserDir is called while it is not initialized; and then fix everything to make it work again. Original commit message: The LindenUserDir (~/.imprudence/first_last/) cannot be initialized before the user logged in. However, several singletons (that only can be initialized once) depend on this directory for initialization. Therefore we have to take care not to instantiate those singletons until after the user logged in. With regard to webit, this fixes the browser_profile (cache and cookies) directory that the builtin browser uses. --- indra/llui/lltexteditor.cpp | 11 +++- indra/llvfs/lldir.cpp | 3 +- indra/llvfs/lldir.h | 2 +- indra/llvfs/lldir_linux.cpp | 2 +- indra/llvfs/lldir_solaris.cpp | 2 +- indra/newview/llappviewer.cpp | 15 +++-- indra/newview/llimview.cpp | 2 +- indra/newview/llmutelist.cpp | 2 +- indra/newview/llstartup.cpp | 4 ++ indra/newview/llurlhistory.cpp | 2 +- indra/newview/llviewermenu.cpp | 2 +- indra/newview/llviewerwindow.cpp | 94 ++++++++++++++++++-------------- indra/newview/llviewerwindow.h | 1 + 13 files changed, 85 insertions(+), 57 deletions(-) diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 3e4860763..3326524cb 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -58,6 +58,7 @@ #include "llimagegl.h" #include "llwindow.h" #include "lltextparser.h" +#include "lldir.h" #include #include "llmenugl.h" #include "../newview/lgghunspell_wrapper.h" @@ -4004,7 +4005,10 @@ void LLTextEditor::appendColoredText(const std::string &new_text, const std::string& font_name) { LLColor4 lcolor=color; - if (mParseHighlights) + // If LindenUserDir is empty then we didn't login yet. + // In that case we can't instantiate LLTextParser, which + // is initialized per user. + if (mParseHighlights && !gDirUtilp->getLindenUserDir(true).empty()) { LLTextParser* highlight = LLTextParser::getInstance(); highlight->parseFullLineHighlights(new_text, &lcolor); @@ -4082,7 +4086,10 @@ void LLTextEditor::appendHighlightedText(const std::string &new_text, S32 highlight_part, LLStyleSP stylep) { - if (mParseHighlights) + // If LindenUserDir is empty then we didn't login yet. + // In that case we can't instantiate LLTextParser, which + // is initialized per user. + if (mParseHighlights && !gDirUtilp->getLindenUserDir(true).empty()) { LLTextParser* highlight = LLTextParser::getInstance(); diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp index d495176de..29b50d7bc 100644 --- a/indra/llvfs/lldir.cpp +++ b/indra/llvfs/lldir.cpp @@ -193,8 +193,9 @@ const std::string &LLDir::getOSUserAppDir() const return mOSUserAppDir; } -const std::string &LLDir::getLindenUserDir() const +const std::string &LLDir::getLindenUserDir(bool empty_ok) const { + llassert(empty_ok || !mLindenUserDir.empty()); return mLindenUserDir; } diff --git a/indra/llvfs/lldir.h b/indra/llvfs/lldir.h index 4111f4ffa..a90b8ab24 100644 --- a/indra/llvfs/lldir.h +++ b/indra/llvfs/lldir.h @@ -92,7 +92,7 @@ class LLDir const std::string &getAppRODataDir() const; // Location of read-only data files const std::string &getOSUserDir() const; // Location of the os-specific user dir const std::string &getOSUserAppDir() const; // Location of the os-specific user app dir - const std::string &getLindenUserDir() const; // Location of the Linden user dir. + const std::string &getLindenUserDir(bool empty_ok = false) const; // Location of the Linden user dir. const std::string &getChatLogsDir() const; // Location of the chat logs dir. const std::string &getPerAccountChatLogsDir() const; // Location of the per account chat logs dir. const std::string &getTempDir() const; // Common temporary directory diff --git a/indra/llvfs/lldir_linux.cpp b/indra/llvfs/lldir_linux.cpp index 6a5834fec..ce6b1885f 100644 --- a/indra/llvfs/lldir_linux.cpp +++ b/indra/llvfs/lldir_linux.cpp @@ -97,7 +97,7 @@ LLDir_Linux::LLDir_Linux() mAppRODataDir = tmp_str; mOSUserDir = getCurrentUserHome(tmp_str); mOSUserAppDir = ""; - mLindenUserDir = tmp_str; + mLindenUserDir = ""; char path [32]; /* Flawfinder: ignore */ diff --git a/indra/llvfs/lldir_solaris.cpp b/indra/llvfs/lldir_solaris.cpp index a39e13fcf..2ebd6e471 100644 --- a/indra/llvfs/lldir_solaris.cpp +++ b/indra/llvfs/lldir_solaris.cpp @@ -100,7 +100,7 @@ LLDir_Solaris::LLDir_Solaris() mAppRODataDir = strdup(tmp_str); mOSUserDir = getCurrentUserHome(tmp_str); mOSUserAppDir = ""; - mLindenUserDir = tmp_str; + mLindenUserDir = ""; char path [LL_MAX_PATH]; /* Flawfinder: ignore */ diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 10f52bf45..bd1521ba3 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3202,12 +3202,15 @@ void LLAppViewer::saveFinalSnapshot() gSavedSettings.setBOOL("ShowParcelOwners", FALSE); idle(); - std::string snap_filename = gDirUtilp->getLindenUserDir(); - snap_filename += gDirUtilp->getDirDelimiter(); - snap_filename += SCREEN_LAST_FILENAME; - // use full pixel dimensions of viewer window (not post-scale dimensions) - gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight(), FALSE, TRUE); - mSavedFinalSnapshot = TRUE; + std::string snap_filename = gDirUtilp->getLindenUserDir(true); + if (!snap_filename.empty()) + { + snap_filename += gDirUtilp->getDirDelimiter(); + snap_filename += SCREEN_LAST_FILENAME; + // use full pixel dimensions of viewer window (not post-scale dimensions) + gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight(), FALSE, TRUE); + mSavedFinalSnapshot = TRUE; + } } } diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index d96aa3bbc..31743deb3 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1347,7 +1347,7 @@ void LLIMMgr::saveIgnoreGroup() { // llinfos << "saving ignore_groups.xml" << llendl; - std::string user_dir = gDirUtilp->getLindenUserDir(); + std::string user_dir = gDirUtilp->getLindenUserDir(true); if (!user_dir.empty()) { std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "ignore_groups.xml"); diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index 40b1c6414..dca58d5f4 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -264,7 +264,7 @@ LLMuteList::~LLMuteList() // If we quit from the login screen we will not have an SL account // name. Don't try to save, otherwise we'll dump a file in // C:\Program Files\SecondLife\ JC - std::string user_dir = gDirUtilp->getLindenUserDir(); + std::string user_dir = gDirUtilp->getLindenUserDir(true); if (!user_dir.empty()) { std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "volume_settings.xml"); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index dd42f2eeb..519ce8d87 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1890,6 +1890,10 @@ bool idle_startup() gLLWindEnabled = gSavedSettings.getBOOL("WindEnabled"); set_startup_status(0.40f, LLTrans::getString("LoginInitializingWorld"), gAgent.mMOTD); + + // Initialize the rest of the world. + gViewerWindow->initWorldUI_postLogin(); + display_startup(); // We should have an agent id by this point. llassert(!(gAgentID == LLUUID::null)); diff --git a/indra/newview/llurlhistory.cpp b/indra/newview/llurlhistory.cpp index 6930d8ac2..a93cc2ff7 100644 --- a/indra/newview/llurlhistory.cpp +++ b/indra/newview/llurlhistory.cpp @@ -74,7 +74,7 @@ bool LLURLHistory::loadFile(const std::string& filename) // static bool LLURLHistory::saveFile(const std::string& filename) { - std::string temp_str = gDirUtilp->getLindenUserDir(); + std::string temp_str = gDirUtilp->getLindenUserDir(true); if( temp_str.empty() ) { llwarns << "Can't save. No user directory set." << llendl; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index b75c3345e..873e6d1ae 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -6643,7 +6643,7 @@ class LLFloaterVisible : public view_listener_t } else if (floater_name == "teleport history") { - new_value = gFloaterTeleportHistory->getVisible(); + new_value = (gFloaterTeleportHistory && gFloaterTeleportHistory->getVisible()); } else if (floater_name == "im") { diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index bcd34fd7d..a82fdb3d5 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1912,7 +1912,8 @@ void LLViewerWindow::initWorldUI() S32 width = mRootView->getRect().getWidth(); LLRect full_window(0, height, width, 0); - if ( gBottomPanel == NULL ) // Don't re-enter if objects are alreay created + // Don't re-enter if objects are alreay created + if (gBottomPanel == NULL) { // panel containing chatbar, toolbar, and overlay, over floaters gBottomPanel = new LLBottomPanel(mRootView->getRect()); @@ -1925,6 +1926,57 @@ void LLViewerWindow::initWorldUI() gIMMgr = LLIMMgr::getInstance(); + // + // Tools for building + // + + init_menus(); + + // Toolbox floater + gFloaterTools = new LLFloaterTools(); + gFloaterTools->setVisible(FALSE); + } + + if ( gHUDView == NULL ) + { + LLRect hud_rect = full_window; + hud_rect.mBottom += 50; + if (gMenuBarView) + { + hud_rect.mTop -= gMenuBarView->getRect().getHeight(); + } + gHUDView = new LLHUDView(hud_rect); + // put behind everything else in the UI + mRootView->addChildAtEnd(gHUDView); + } +} + +// initWorldUI that wasn't before logging in. Some of this may require the access the 'LindenUserDir'. +void LLViewerWindow::initWorldUI_postLogin() +{ + S32 height = mRootView->getRect().getHeight(); + S32 width = mRootView->getRect().getWidth(); + LLRect full_window(0, height, width, 0); + + // Don't re-enter if objects are alreay created. + if (!gStatusBar) + { + // Status bar + S32 menu_bar_height = gMenuBarView->getRect().getHeight(); + LLRect root_rect = getRootView()->getRect(); + LLRect status_rect(0, root_rect.getHeight(), root_rect.getWidth(), root_rect.getHeight() - menu_bar_height); + gStatusBar = new LLStatusBar(std::string("status"), status_rect); + gStatusBar->setFollows(FOLLOWS_LEFT | FOLLOWS_RIGHT | FOLLOWS_TOP); + + gStatusBar->reshape(root_rect.getWidth(), gStatusBar->getRect().getHeight(), TRUE); + gStatusBar->translate(0, root_rect.getHeight() - gStatusBar->getRect().getHeight()); + // sync bg color with menu bar + gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor() ); + getRootView()->addChild(gStatusBar); + + // Menu holder appears on top to get first pass at all mouse events + getRootView()->sendChildToFront(gMenuHolder); + if ( gSavedPerAccountSettings.getBOOL("LogShowHistory") ) { LLFloaterChat::getInstance(LLSD())->loadHistory(); @@ -1950,47 +2002,7 @@ void LLViewerWindow::initWorldUI() gFloaterTeleportHistory = new LLFloaterTeleportHistory(); gFloaterTeleportHistory->setVisible(FALSE); - // - // Tools for building - // - - // Toolbox floater - init_menus(); - - gFloaterTools = new LLFloaterTools(); - gFloaterTools->setVisible(FALSE); - - // Status bar - S32 menu_bar_height = gMenuBarView->getRect().getHeight(); - LLRect root_rect = getRootView()->getRect(); - LLRect status_rect(0, root_rect.getHeight(), root_rect.getWidth(), root_rect.getHeight() - menu_bar_height); - gStatusBar = new LLStatusBar(std::string("status"), status_rect); - gStatusBar->setFollows(FOLLOWS_LEFT | FOLLOWS_RIGHT | FOLLOWS_TOP); - - gStatusBar->reshape(root_rect.getWidth(), gStatusBar->getRect().getHeight(), TRUE); - gStatusBar->translate(0, root_rect.getHeight() - gStatusBar->getRect().getHeight()); - // sync bg color with menu bar - gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor() ); - LLFloaterChatterBox::createInstance(LLSD()); - - getRootView()->addChild(gStatusBar); - - // menu holder appears on top to get first pass at all mouse events - getRootView()->sendChildToFront(gMenuHolder); - } - - if ( gHUDView == NULL ) - { - LLRect hud_rect = full_window; - hud_rect.mBottom += 50; - if (gMenuBarView) - { - hud_rect.mTop -= gMenuBarView->getRect().getHeight(); - } - gHUDView = new LLHUDView(hud_rect); - // put behind everything else in the UI - mRootView->addChildAtEnd(gHUDView); } } diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index 538a6f188..21867f7eb 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -144,6 +144,7 @@ public: void adjustRectanglesForFirstUse(const LLRect& window); void adjustControlRectanglesForFirstUse(const LLRect& window); void initWorldUI(); + void initWorldUI_postLogin(); // // LLWindowCallback interface implementation From f2199a504b661b4b09572c2da5ba83c58694d7ac Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Wed, 4 May 2011 19:48:16 +0200 Subject: [PATCH 12/44] More various small, old patches. Updated source tree to include everything I did up till 2010-11-09. Still to add: IMP-590, IMP-701, IMP-734, IMP-735 and IMP-702. --- doc/contributions.txt | 8 +++++++- indra/cmake/LLCommon.cmake | 9 +-------- indra/llcommon/llstring.h | 4 ++-- indra/llui/llnotifications.cpp | 4 ++-- indra/llvfs/llvfs.cpp | 5 +++-- indra/newview/llfeaturemanager.cpp | 11 +--------- indra/newview/llnamelistctrl.cpp | 2 +- indra/newview/llnamelistctrl.h | 2 +- indra/newview/lltexturecache.cpp | 2 +- .../skins/default/textures/textures.xml | 1 + install.xml | 20 +++---------------- 11 files changed, 23 insertions(+), 45 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index b13dba64c..d957cc782 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -84,7 +84,7 @@ Aleric Inglewood SNOW-477 (IMP-577) SNOW-479 SNOW-626 - SNOW-713 + SNOW-713 (IMP-692) SNOW-744 (IMP-578) SNOW-752 SNOW-753 @@ -100,6 +100,12 @@ Aleric Inglewood IMP-566 IMP-567 IMP-573 + IMP-660 + IMP-661 + IMP-662 + IMP-663 + IMP-664 + IMP-670 Alissa Sabre VWR-81 VWR-83 diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake index d87d3c015..2862ba7f0 100644 --- a/indra/cmake/LLCommon.cmake +++ b/indra/cmake/LLCommon.cmake @@ -11,11 +11,4 @@ set(LLCOMMON_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ) -if (LINUX) - # In order to support using ld.gold on linux, we need to explicitely - # specify all libraries that llcommon uses. - # llcommon uses `clock_gettime' which is provided by librt on linux. - set(LLCOMMON_LIBRARIES llcommon rt) -else (LINUX) - set(LLCOMMON_LIBRARIES llcommon) -endif (LINUX) +set(LLCOMMON_LIBRARIES llcommon) diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index 4343a6385..171747921 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -213,7 +213,7 @@ public: ///////////////////////////////////////////////////////////////////////////////////////// // Static Utility functions that operate on std::strings - static std::basic_string null; + static std::basic_string const null; typedef std::map format_map_t; static S32 format(std::basic_string& s, const format_map_t& fmt_map); @@ -304,7 +304,7 @@ public: }; -template std::basic_string LLStringUtilBase::null; +template std::basic_string const LLStringUtilBase::null; typedef LLStringUtilBase LLStringUtil; typedef LLStringUtilBase LLWStringUtil; diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index 7748df84f..6bd4e4f22 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -1194,13 +1194,13 @@ void replaceSubstitutionStrings(LLXMLNodePtr node, StringMap& replacements) if (found != replacements.end()) { replacement = found->second; - //llwarns << "replaceSubstituionStrings: value: " << value << " repl: " << replacement << llendl; + //llinfos << "replaceSubstitutionStrings: value: \"" << value << "\" repl: \"" << replacement << "\"." << llendl; it->second->setValue(replacement); } else { - llwarns << "replaceSubstituionStrings FAILURE: value: " << value << " repl: " << replacement << llendl; + llwarns << "replaceSubstitutionStrings FAILURE: could not find replacement \"" << value << "\"." << llendl; } } } diff --git a/indra/llvfs/llvfs.cpp b/indra/llvfs/llvfs.cpp index 18c3951fd..b90d4b3c8 100644 --- a/indra/llvfs/llvfs.cpp +++ b/indra/llvfs/llvfs.cpp @@ -566,8 +566,9 @@ LLVFS::LLVFS(const std::string& index_filename, const std::string& data_filename } } - LL_WARNS("VFS") << "Using index file " << mIndexFilename << LL_ENDL; - LL_WARNS("VFS") << "Using data file " << mDataFilename << LL_ENDL; + // Success! + LL_INFOS("VFS") << "Using index file " << mIndexFilename << LL_ENDL; + LL_INFOS("VFS") << "Using data file " << mDataFilename << LL_ENDL; mValid = VFSVALID_OK; } diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index b3cff3315..9614f639d 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -252,12 +252,10 @@ BOOL LLFeatureManager::loadFeatureTables() mTableVersion = version; LLFeatureList *flp = NULL; - while (!file.eof() && file.good()) + while (file >> name) { char buffer[MAX_STRING]; /*Flawfinder: ignore*/ - file >> name; - if (name.substr(0,2) == "//") { // This is a comment. @@ -265,13 +263,6 @@ BOOL LLFeatureManager::loadFeatureTables() continue; } - if (name.empty()) - { - // This is a blank line - file.getline(buffer, MAX_STRING); - continue; - } - if (name == "list") { if (flp) diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index 453cf7fab..364fb1c44 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -72,7 +72,7 @@ LLNameListCtrl::~LLNameListCtrl() // public BOOL LLNameListCtrl::addNameItem(const LLUUID& agent_id, EAddPosition pos, - BOOL enabled, std::string& suffix) + BOOL enabled, std::string const& suffix) { //llinfos << "LLNameListCtrl::addNameItem " << agent_id << llendl; diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h index 1b7795ddf..4485faedf 100644 --- a/indra/newview/llnamelistctrl.h +++ b/indra/newview/llnamelistctrl.h @@ -58,7 +58,7 @@ public: // Add a user to the list by name. It will be added, the name // requested from the cache, and updated as necessary. BOOL addNameItem(const LLUUID& agent_id, EAddPosition pos = ADD_BOTTOM, - BOOL enabled = TRUE, std::string& suffix = LLStringUtil::null); + BOOL enabled = TRUE, std::string const& suffix = LLStringUtil::null); BOOL addNameItem(LLScrollListItem* item, EAddPosition pos = ADD_BOTTOM); virtual LLScrollListItem* addElement(const LLSD& value, EAddPosition pos = ADD_BOTTOM, void* userdata = NULL); diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 5c27e365a..5e08d7608 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -1426,7 +1426,7 @@ void LLTextureCache::readHeaderCache() { // Special case: cache size was reduced, need to remove entries // Note: After we prune entries, we will call this again and create the LRU - U32 entries_to_purge = (num_entries-empty_entries) - sCacheMaxEntries; + U32 entries_to_purge = (num_entries - empty_entries) - sCacheMaxEntries; llinfos << "Texture Cache Entries: " << num_entries << " Max: " << sCacheMaxEntries << " Empty: " << empty_entries << " Purging: " << entries_to_purge << llendl; // We can exit the following loop with the given condition, since if we'd reach the end of the lru set we'd have: // purge_list.size() = lru.size() = num_entries - empty_entries = entries_to_purge + sCacheMaxEntries >= entries_to_purge diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 0f5cc88ad..3f93a7ef8 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -389,5 +389,6 @@ + diff --git a/install.xml b/install.xml index fc920198b..fe1320c33 100644 --- a/install.xml +++ b/install.xml @@ -162,26 +162,12 @@ artwork packages - darwin + common md5sum - 5e047437d73d1017bf270a6c6e936f23 + a2cde4f24bdcc260b661e139846b8acd url - http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/artwork-common-20090415.tar.bz2 - - linux - - md5sum - 5e047437d73d1017bf270a6c6e936f23 - url - http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/artwork-common-20090415.tar.bz2 - - windows - - md5sum - 5e047437d73d1017bf270a6c6e936f23 - url - http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/artwork-common-20090415.tar.bz2 + http://imprudenceviewer.org/download/libs/imprudence-artwork-20101026.tar.bz2 From 5b085600478ca2779cc6ae42d154df13301500bd Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Wed, 4 May 2011 22:23:49 +0200 Subject: [PATCH 13/44] Update of doc/contributions.txt with patches from snowstorm already in Singularity. --- doc/contributions.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index d957cc782..bad74fb03 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -62,14 +62,18 @@ Aimee Trescothick Alejandro Rosenthal VWR-1184 Aleric Inglewood + VWR-10579 (IMP-552) VWR-10759 VWR-10837 - VWR-12838 (IMP-552) VWR-12984 VWR-13040 (IMP-575) VWR-13996 VWR-14426 VWR-14914 + VWR-24247 + VWR-24312 + VWR-24320 + VWR-24333 SNOW-47 SNOW-84 SNOW-86 From 4d932d5e2ded747fcfa16fc0aabb546bbbe688dd Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Thu, 5 May 2011 01:34:00 +0200 Subject: [PATCH 14/44] Added a thread-safe and robust wrapper for APR pools. See http://redmine.imprudenceviewer.org/issues/590 and https://jira.secondlife.com/browse/SNOW-596 --- doc/contributions.txt | 1 + indra/llcommon/CMakeLists.txt | 3 + indra/llcommon/aiaprpool.cpp | 198 ++++++++++++ indra/llcommon/aiaprpool.h | 238 ++++++++++++++ indra/llcommon/llapp.cpp | 5 - indra/llcommon/llapr.cpp | 298 +++--------------- indra/llcommon/llapr.h | 74 +---- indra/llcommon/llcommon.cpp | 13 - indra/llcommon/llcommon.h | 2 - indra/llcommon/llerror.cpp | 3 + indra/llcommon/llfixedbuffer.cpp | 3 +- indra/llcommon/llscopedvolatileaprpool.h | 58 ++++ indra/llcommon/llthread.cpp | 135 ++++---- indra/llcommon/llthread.h | 92 +++++- indra/llcommon/llworkerthread.cpp | 3 +- indra/llcommon/llworkerthread.h | 2 +- indra/llcrashlogger/llcrashlogger.cpp | 3 +- indra/llimage/llimage.cpp | 2 +- indra/llimage/llimagej2c.cpp | 15 +- indra/llimage/llimageworker.cpp | 13 +- indra/llimage/llimageworker.h | 4 +- indra/llmath/llvolumemgr.cpp | 4 +- indra/llmessage/llares.cpp | 17 +- indra/llmessage/llcurl.cpp | 2 +- indra/llmessage/lliohttpserver.cpp | 10 +- indra/llmessage/lliohttpserver.h | 2 +- indra/llmessage/lliosocket.cpp | 99 +++--- indra/llmessage/lliosocket.h | 33 +- indra/llmessage/llmail.cpp | 17 +- indra/llmessage/llmail.h | 4 +- indra/llmessage/llpumpio.cpp | 74 ++--- indra/llmessage/llpumpio.h | 31 +- indra/llmessage/llurlrequest.cpp | 25 +- indra/llmessage/message.cpp | 19 +- indra/llplugin/llplugininstance.cpp | 5 +- indra/llplugin/llpluginmessagepipe.cpp | 2 - indra/llplugin/llpluginprocesschild.cpp | 2 +- indra/llplugin/llpluginprocessparent.cpp | 55 ++-- indra/llplugin/llpluginprocessparent.h | 2 + indra/llplugin/llpluginsharedmemory.cpp | 9 +- indra/llplugin/llpluginsharedmemory.h | 3 + indra/llplugin/slplugin/slplugin.cpp | 4 - indra/llvfs/llvfs.cpp | 2 +- .../webkit/linux_volume_catcher.cpp | 14 +- indra/newview/llappviewer.cpp | 2 +- indra/newview/llappviewerlinux.cpp | 1 + indra/newview/llappviewermacosx.cpp | 1 + indra/newview/llconsole.cpp | 3 +- indra/newview/lltexturecache.cpp | 3 - indra/newview/lltexturecache.h | 3 - indra/newview/lltexturefetch.cpp | 5 +- indra/newview/llviewerprecompiledheaders.h | 2 +- indra/newview/llvoiceclient.cpp | 2 +- indra/newview/llwatchdog.cpp | 4 +- indra/test/lltemplatemessagebuilder_tut.cpp | 2 - indra/test/message_tut.cpp | 2 - indra/test/test.cpp | 16 +- 57 files changed, 895 insertions(+), 751 deletions(-) create mode 100644 indra/llcommon/aiaprpool.cpp create mode 100644 indra/llcommon/aiaprpool.h create mode 100644 indra/llcommon/llscopedvolatileaprpool.h diff --git a/doc/contributions.txt b/doc/contributions.txt index bad74fb03..849c95de4 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -104,6 +104,7 @@ Aleric Inglewood IMP-566 IMP-567 IMP-573 + IMP-590 IMP-660 IMP-661 IMP-662 diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 4bcfce5b0..cc6bffe3f 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -13,6 +13,7 @@ include_directories( ) set(llcommon_SOURCE_FILES + aiaprpool.cpp imageids.cpp indra_constants.cpp llapp.cpp @@ -78,6 +79,7 @@ set(llcommon_SOURCE_FILES set(llcommon_HEADER_FILES CMakeLists.txt + aiaprpool.h bitpack.h ctype_workaround.h doublelinkedlist.h @@ -155,6 +157,7 @@ set(llcommon_HEADER_FILES llqueuedthread.h llrand.h llrun.h + llscopedvolatileaprpool.h llsd.h llsdserialize.h llsdserialize_xml.h diff --git a/indra/llcommon/aiaprpool.cpp b/indra/llcommon/aiaprpool.cpp new file mode 100644 index 000000000..d3748e983 --- /dev/null +++ b/indra/llcommon/aiaprpool.cpp @@ -0,0 +1,198 @@ +/** + * @file aiaprpool.cpp + * + * Copyright (c) 2010, Aleric Inglewood. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution. + * + * CHANGELOG + * and additional copyright holders. + * + * 04/04/2010 + * - Initial version, written by Aleric Inglewood @ SL + * + * 10/11/2010 + * - Changed filename, class names and license to a more + * company-neutral format. + * - Added APR_HAS_THREADS #if's to allow creation and destruction + * of subpools by threads other than the parent pool owner. + */ + +#include "linden_common.h" + +#include "llerror.h" +#include "aiaprpool.h" +#include "llthread.h" + +// Create a subpool from parent. +void AIAPRPool::create(AIAPRPool& parent) +{ + llassert(!mPool); // Must be non-initialized. + mParent = &parent; + if (!mParent) // Using the default parameter? + { + // By default use the root pool of the current thread. + mParent = &AIThreadLocalData::tldata().mRootPool; + } + llassert(mParent->mPool); // Parent must be initialized. +#if APR_HAS_THREADS + // As per the documentation of APR (ie http://apr.apache.org/docs/apr/1.4/apr__pools_8h.html): + // + // Note that most operations on pools are not thread-safe: a single pool should only be + // accessed by a single thread at any given time. The one exception to this rule is creating + // a subpool of a given pool: one or more threads can safely create subpools at the same + // time that another thread accesses the parent pool. + // + // In other words, it's safe for any thread to create a (sub)pool, independent of who + // owns the parent pool. + mOwner = apr_os_thread_current(); +#else + mOwner = mParent->mOwner; + llassert(apr_os_thread_equal(mOwner, apr_os_thread_current())); +#endif + apr_status_t const apr_pool_create_status = apr_pool_create(&mPool, mParent->mPool); + llassert_always(apr_pool_create_status == APR_SUCCESS); + llassert(mPool); // Initialized. + apr_pool_cleanup_register(mPool, this, &s_plain_cleanup, &apr_pool_cleanup_null); +} + +// Destroy the (sub)pool, if any. +void AIAPRPool::destroy(void) +{ + // Only do anything if we are not already (being) destroyed. + if (mPool) + { +#if !APR_HAS_THREADS + // If we are a root pool, then every thread may destruct us: in that case + // we have to assume that no other thread will use this pool concurrently, + // of course. Otherwise, if we are a subpool, only the thread that owns + // the parent may destruct us, since that is the pool that is still alive, + // possibly being used by others and being altered here. + llassert(!mParent || apr_os_thread_equal(mParent->mOwner, apr_os_thread_current())); +#endif + apr_pool_t* pool = mPool; + mPool = NULL; // Mark that we are BEING destructed. + apr_pool_cleanup_kill(pool, this, &s_plain_cleanup); + apr_pool_destroy(pool); + } +} + +bool AIAPRPool::parent_is_being_destructed(void) +{ + return mParent && (!mParent->mPool || mParent->parent_is_being_destructed()); +} + +AIAPRInitialization::AIAPRInitialization(void) +{ + static bool apr_initialized = false; + + if (!apr_initialized) + { + apr_initialize(); + } + + apr_initialized = true; +} + +bool AIAPRRootPool::sCountInitialized = false; +apr_uint32_t volatile AIAPRRootPool::sCount; + +extern apr_thread_mutex_t* gLogMutexp; +extern apr_thread_mutex_t* gCallStacksLogMutexp; + +AIAPRRootPool::AIAPRRootPool(void) : AIAPRInitialization(), AIAPRPool(0) +{ + // sCountInitialized don't need locking because when we get here there is still only a single thread. + if (!sCountInitialized) + { + // Initialize the logging mutex + apr_thread_mutex_create(&gLogMutexp, APR_THREAD_MUTEX_UNNESTED, mPool); + apr_thread_mutex_create(&gCallStacksLogMutexp, APR_THREAD_MUTEX_UNNESTED, mPool); + + apr_status_t status = apr_atomic_init(mPool); + llassert_always(status == APR_SUCCESS); + apr_atomic_set32(&sCount, 1); // Set to 1 to account for the global root pool. + sCountInitialized = true; + + // Initialize thread-local APR pool support. + // Because this recursively calls AIAPRRootPool::AIAPRRootPool(void) + // it must be done last, so that sCount is already initialized. + AIThreadLocalData::init(); + } + apr_atomic_inc32(&sCount); +} + +AIAPRRootPool::~AIAPRRootPool() +{ + if (!apr_atomic_dec32(&sCount)) + { + // The last pool was destructed. Cleanup remainder of APR. + LL_INFOS("APR") << "Cleaning up APR" << LL_ENDL; + + if (gLogMutexp) + { + // Clean up the logging mutex + + // All other threads NEED to be done before we clean up APR, so this is okay. + apr_thread_mutex_destroy(gLogMutexp); + gLogMutexp = NULL; + } + if (gCallStacksLogMutexp) + { + // Clean up the logging mutex + + // All other threads NEED to be done before we clean up APR, so this is okay. + apr_thread_mutex_destroy(gCallStacksLogMutexp); + gCallStacksLogMutexp = NULL; + } + + // Must destroy ALL, and therefore this last AIAPRRootPool, before terminating APR. + static_cast(this)->destroy(); + + apr_terminate(); + } +} + +//static +AIAPRRootPool& AIAPRRootPool::get(void) +{ + static AIAPRRootPool global_APRpool(0); // This is what used to be gAPRPoolp. + return global_APRpool; +} + +void AIVolatileAPRPool::clearVolatileAPRPool() +{ + llassert_always(mNumActiveRef > 0); + if (--mNumActiveRef == 0) + { + if (isOld()) + { + destroy(); + mNumTotalRef = 0 ; + } + else + { + // This does not actually free the memory, + // it just allows the pool to re-use this memory for the next allocation. + clear(); + } + } + + // Paranoia check if the pool is jammed. + llassert(mNumTotalRef < (FULL_VOLATILE_APR_POOL << 2)) ; +} diff --git a/indra/llcommon/aiaprpool.h b/indra/llcommon/aiaprpool.h new file mode 100644 index 000000000..72e9ddbd4 --- /dev/null +++ b/indra/llcommon/aiaprpool.h @@ -0,0 +1,238 @@ +/** + * @file aiaprpool.h + * @brief Implementation of AIAPRPool. + * + * Copyright (c) 2010, Aleric Inglewood. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution. + * + * CHANGELOG + * and additional copyright holders. + * + * 04/04/2010 + * - Initial version, written by Aleric Inglewood @ SL + * + * 10/11/2010 + * - Changed filename, class names and license to a more + * company-neutral format. + * - Added APR_HAS_THREADS #if's to allow creation and destruction + * of subpools by threads other than the parent pool owner. + */ + +#ifndef AIAPRPOOL_H +#define AIAPRPOOL_H + +#ifdef LL_WINDOWS +#include // Needed before including apr_portable.h +#endif + +#include "apr_portable.h" +#include "apr_pools.h" +#include "llerror.h" + +extern void ll_init_apr(); + +/** + * @brief A wrapper around the APR memory pool API. + * + * Usage of this class should be restricted to passing it to libapr-1 function calls that need it. + * + */ +class LL_COMMON_API AIAPRPool +{ +protected: + apr_pool_t* mPool; //!< Pointer to the underlaying pool. NULL if not initialized. + AIAPRPool* mParent; //!< Pointer to the parent pool, if any. Only valid when mPool is non-zero. + apr_os_thread_t mOwner; //!< The thread that owns this memory pool. Only valid when mPool is non-zero. + +public: + //! Construct an uninitialized (destructed) pool. + AIAPRPool(void) : mPool(NULL) { } + + //! Construct a subpool from an existing pool. + // This is not a copy-constructor, this class doesn't have one! + AIAPRPool(AIAPRPool& parent) : mPool(NULL) { create(parent); } + + //! Destruct the memory pool (free all of it's subpools and allocated memory). + ~AIAPRPool() { destroy(); } + +protected: + // Create a pool that is allocated from the Operating System. Only used by AIAPRRootPool. + AIAPRPool(int) : mPool(NULL), mParent(NULL), mOwner(apr_os_thread_current()) + { + apr_status_t const apr_pool_create_status = apr_pool_create(&mPool, NULL); + llassert_always(apr_pool_create_status == APR_SUCCESS); + llassert(mPool); + apr_pool_cleanup_register(mPool, this, &s_plain_cleanup, &apr_pool_cleanup_null); + } + +public: + //! Create a subpool from parent. May only be called for an uninitialized/destroyed pool. + // The default parameter causes the root pool of the current thread to be used. + void create(AIAPRPool& parent = *static_cast(NULL)); + + //! Destroy the (sub)pool, if any. + void destroy(void); + + // Use some safebool idiom (http://www.artima.com/cppsource/safebool.html) rather than operator bool. + typedef apr_pool_t* const AIAPRPool::* const bool_type; + //! Return true if the pool is initialized. + operator bool_type() const { return mPool ? &AIAPRPool::mPool : 0; } + + // Painful, but we have to either provide access to this, or wrap + // every APR function call that needs a apr_pool_t* to be passed. + // NEVER destroy a pool that is returned by this function! + apr_pool_t* operator()(void) const + { + llassert(mPool); + llassert(apr_os_thread_equal(mOwner, apr_os_thread_current())); + return mPool; + } + + // Free all memory without destructing the pool. + void clear(void) + { + llassert(mPool); + llassert(apr_os_thread_equal(mOwner, apr_os_thread_current())); + apr_pool_clear(mPool); + } + +// These methods would make this class 'complete' (as wrapper around the libapr +// pool functions), but we don't use memory pools in the viewer (only when +// we are forced to pass one to a libapr call), so don't define them in order +// not to encourage people to use them. +#if 0 + void* palloc(size_t size) + { + llassert(mPool); + llassert(apr_os_thread_equal(mOwner, apr_os_thread_current())); + return apr_palloc(mPool, size); + } + void* pcalloc(size_t size) + { + llassert(mPool); + llassert(apr_os_thread_equal(mOwner, apr_os_thread_current())); + return apr_pcalloc(mPool, size); + } +#endif + +private: + bool parent_is_being_destructed(void); + static apr_status_t s_plain_cleanup(void* userdata) { return static_cast(userdata)->plain_cleanup(); } + + apr_status_t plain_cleanup(void) + { + if (mPool && // We are not being destructed, + parent_is_being_destructed()) // but our parent is. + // This means the pool is being destructed recursively by libapr + // because one of it's parents is being destructed. + { + mPool = NULL; // Stop destroy() from destructing the pool again. + } + return APR_SUCCESS; + } +}; + +class AIAPRInitialization +{ +public: + AIAPRInitialization(void); +}; + +/** + * @brief Root memory pool (allocates memory from the operating system). + * + * This class should only be used by AIThreadLocalData and AIThreadSafeSimpleDCRootPool_pbase + * (and LLMutexRootPool when APR_HAS_THREADS isn't defined). + */ +class LL_COMMON_API AIAPRRootPool : public AIAPRInitialization, public AIAPRPool +{ +private: + friend class AIThreadLocalData; + friend class AIThreadSafeSimpleDCRootPool_pbase; +#if !APR_HAS_THREADS + friend class LLMutexRootPool; +#endif + //! Construct a root memory pool. + // Should only be used by AIThreadLocalData and AIThreadSafeSimpleDCRootPool_pbase. + AIAPRRootPool(void); + ~AIAPRRootPool(); + +private: + // Keep track of how many root pools exist and when the last one is destructed. + static bool sCountInitialized; + static apr_uint32_t volatile sCount; + +public: + // Return a global root pool that is independent of AIThreadLocalData. + // Normally you should not use this. Only use for early initialization + // (before main) and deinitialization (after main). + static AIAPRRootPool& get(void); + +#if APR_POOL_DEBUG + void grab_ownership(void) + { + // You need a patched libapr to use this. + // See http://web.archiveorange.com/archive/v/5XO9y2zoxUOMt6Gmi1OI + apr_pool_owner_set(mPool); + } +#endif + +private: + // Used for constructing the Special Global Root Pool (returned by AIAPRRootPool::get). + // It is the same as the default constructor but omits to increment sCount. As a result, + // we must be sure that at least one other AIAPRRootPool is created before termination + // of the application (which is the case: we create one AIAPRRootPool per thread). + AIAPRRootPool(int) : AIAPRInitialization(), AIAPRPool(0) { } +}; + +//! Volatile memory pool +// +// 'Volatile' APR memory pool which normally only clears memory, +// and does not destroy the pool (the same pool is reused) for +// greater efficiency. However, as a safe guard the apr pool +// is destructed every FULL_VOLATILE_APR_POOL uses to allow +// the system memory to be allocated more efficiently and not +// get scattered through RAM. +// +class LL_COMMON_API AIVolatileAPRPool : protected AIAPRPool +{ +public: + AIVolatileAPRPool(void) : mNumActiveRef(0), mNumTotalRef(0) { } + + apr_pool_t* getVolatileAPRPool(void) + { + if (!mPool) create(); + ++mNumActiveRef; + ++mNumTotalRef; + return AIAPRPool::operator()(); + } + void clearVolatileAPRPool(void); + + bool isOld(void) const { return mNumTotalRef > FULL_VOLATILE_APR_POOL; } + bool isUnused() const { return mNumActiveRef == 0; } + +private: + S32 mNumActiveRef; // Number of active uses of the pool. + S32 mNumTotalRef; // Number of total uses of the pool since last creation. + + // Maximum number of references to AIVolatileAPRPool until the pool is recreated. + static S32 const FULL_VOLATILE_APR_POOL = 1024; +}; + +#endif // AIAPRPOOL_H diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp index fb2fdd814..d5e75c76f 100644 --- a/indra/llcommon/llapp.cpp +++ b/indra/llcommon/llapp.cpp @@ -123,13 +123,8 @@ void LLApp::commonCtor() mOptions.append(sd); } - // Make sure we clean up APR when we exit - // Don't need to do this if we're cleaning up APR in the destructor - //atexit(ll_cleanup_apr); - // Set the application to this instance. sApplication = this; - } LLApp::LLApp(LLErrorThread *error_thread) : diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp index 7210bd2b1..9595707cb 100644 --- a/indra/llcommon/llapr.cpp +++ b/indra/llcommon/llapr.cpp @@ -34,219 +34,7 @@ #include "linden_common.h" #include "llapr.h" - -apr_pool_t *gAPRPoolp = NULL; // Global APR memory pool -apr_thread_mutex_t *gLogMutexp = NULL; -apr_thread_mutex_t *gCallStacksLogMutexp = NULL; - -const S32 FULL_VOLATILE_APR_POOL = 1024 ; //number of references to LLVolatileAPRPool - -void ll_init_apr() -{ - if (!gAPRPoolp) - { - // Initialize APR and create the global pool - apr_initialize(); - apr_pool_create(&gAPRPoolp, NULL); - - // Initialize the logging mutex - apr_thread_mutex_create(&gLogMutexp, APR_THREAD_MUTEX_UNNESTED, gAPRPoolp); - apr_thread_mutex_create(&gCallStacksLogMutexp, APR_THREAD_MUTEX_UNNESTED, gAPRPoolp); - - // Initialize thread-local APR pool support. - LLVolatileAPRPool::initLocalAPRFilePool(); - } -} - - -void ll_cleanup_apr() -{ - LL_INFOS("APR") << "Cleaning up APR" << LL_ENDL; - - if (gLogMutexp) - { - // Clean up the logging mutex - - // All other threads NEED to be done before we clean up APR, so this is okay. - apr_thread_mutex_destroy(gLogMutexp); - gLogMutexp = NULL; - } - if (gCallStacksLogMutexp) - { - // Clean up the logging mutex - - // All other threads NEED to be done before we clean up APR, so this is okay. - apr_thread_mutex_destroy(gCallStacksLogMutexp); - gCallStacksLogMutexp = NULL; - } - if (gAPRPoolp) - { - apr_pool_destroy(gAPRPoolp); - gAPRPoolp = NULL; - } - apr_terminate(); -} - -// -// -//LLAPRPool -// -LLAPRPool::LLAPRPool(apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag) - : mParent(parent), - mReleasePoolFlag(releasePoolFlag), - mMaxSize(size), - mPool(NULL) -{ - createAPRPool() ; -} - -LLAPRPool::~LLAPRPool() -{ - releaseAPRPool() ; -} - -void LLAPRPool::createAPRPool() -{ - if(mPool) - { - return ; - } - - mStatus = apr_pool_create(&mPool, mParent); - ll_apr_warn_status(mStatus) ; - - if(mMaxSize > 0) //size is the number of blocks (which is usually 4K), NOT bytes. - { - apr_allocator_t *allocator = apr_pool_allocator_get(mPool); - if (allocator) - { - apr_allocator_max_free_set(allocator, mMaxSize) ; - } - } -} - -void LLAPRPool::releaseAPRPool() -{ - if(!mPool) - { - return ; - } - - if(!mParent || mReleasePoolFlag) - { - apr_pool_destroy(mPool) ; - mPool = NULL ; - } -} - -apr_pool_t* LLAPRPool::getAPRPool() -{ - if(!mPool) - { - createAPRPool() ; - } - - return mPool ; -} -LLVolatileAPRPool::LLVolatileAPRPool(apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag) - : LLAPRPool(parent, size, releasePoolFlag) -{ - mNumActiveRef = 0 ; - mNumTotalRef = 0 ; -} - -apr_pool_t* LLVolatileAPRPool::getVolatileAPRPool() -{ - mNumTotalRef++ ; - mNumActiveRef++ ; - return getAPRPool() ; -} - -void LLVolatileAPRPool::clearVolatileAPRPool() -{ - if(mNumActiveRef > 0) - { - mNumActiveRef--; - if(mNumActiveRef < 1) - { - if(isFull()) - { - mNumTotalRef = 0 ; - - //destroy the apr_pool. - releaseAPRPool() ; - } - else - { - //This does not actually free the memory, - //it just allows the pool to re-use this memory for the next allocation. - apr_pool_clear(mPool) ; - } - } - } - else - { - llassert_always(mNumActiveRef > 0) ; - } - - //paranoia check if the pool is jammed. - //will remove the check before going to release. - llassert_always(mNumTotalRef < (FULL_VOLATILE_APR_POOL << 2)) ; -} - -BOOL LLVolatileAPRPool::isFull() -{ - return mNumTotalRef > FULL_VOLATILE_APR_POOL ; -} - -#ifdef SHOW_ASSERT -// This allows the use of llassert(is_main_thread()) to assure the current thread is the main thread. -static void* gIsMainThread; -bool is_main_thread() { return gIsMainThread == LLVolatileAPRPool::getLocalAPRFilePool(); } -#endif - -// The thread private handle to access the LocalAPRFilePool. -apr_threadkey_t* LLVolatileAPRPool::sLocalAPRFilePoolKey; - -// This should be called exactly once, before the first call to createLocalAPRFilePool. -// static -void LLVolatileAPRPool::initLocalAPRFilePool() -{ - apr_status_t status = apr_threadkey_private_create(&sLocalAPRFilePoolKey, &destroyLocalAPRFilePool, gAPRPoolp); - ll_apr_assert_status(status); // Or out of memory, or system-imposed limit on the - // total number of keys per process {PTHREAD_KEYS_MAX} - // has been exceeded. - // Create the thread-local pool for the main thread (this function is called by the main thread). - createLocalAPRFilePool(); -#ifdef SHOW_ASSERT - gIsMainThread = getLocalAPRFilePool(); -#endif -} - -// This should be called once for every thread, before it uses getLocalAPRFilePool. -// static -void LLVolatileAPRPool::createLocalAPRFilePool() -{ - void* thread_local_data = new LLVolatileAPRPool; - apr_status_t status = apr_threadkey_private_set(thread_local_data, sLocalAPRFilePoolKey); - llassert_always(status == APR_SUCCESS); -} - -// This is called once for every thread when the thread is destructed. -// static -void LLVolatileAPRPool::destroyLocalAPRFilePool(void* thread_local_data) -{ - delete reinterpret_cast(thread_local_data); -} - -// static -LLVolatileAPRPool* LLVolatileAPRPool::getLocalAPRFilePool() -{ - void* thread_local_data; - apr_status_t status = apr_threadkey_private_get(&thread_local_data, sLocalAPRFilePoolKey); - llassert_always(status == APR_SUCCESS); - return reinterpret_cast(thread_local_data); -} +#include "llscopedvolatileaprpool.h" //--------------------------------------------------------------------- // @@ -309,13 +97,15 @@ void ll_apr_assert_status(apr_status_t status) // LLAPRFile::LLAPRFile() : mFile(NULL), - mCurrentFilePoolp(NULL) + mVolatileFilePoolp(NULL), + mRegularFilePoolp(NULL) { } LLAPRFile::LLAPRFile(const std::string& filename, apr_int32_t flags, access_t access_type) : mFile(NULL), - mCurrentFilePoolp(NULL) + mVolatileFilePoolp(NULL), + mRegularFilePoolp(NULL) { open(filename, flags, access_type); } @@ -334,10 +124,16 @@ apr_status_t LLAPRFile::close() mFile = NULL ; } - if(mCurrentFilePoolp) + if (mVolatileFilePoolp) { - mCurrentFilePoolp->clearVolatileAPRPool() ; - mCurrentFilePoolp = NULL ; + mVolatileFilePoolp->clearVolatileAPRPool() ; + mVolatileFilePoolp = NULL ; + } + + if (mRegularFilePoolp) + { + delete mRegularFilePoolp; + mRegularFilePoolp = NULL; } return ret ; @@ -346,25 +142,28 @@ apr_status_t LLAPRFile::close() apr_status_t LLAPRFile::open(std::string const& filename, apr_int32_t flags, access_t access_type, S32* sizep) { llassert_always(!mFile); - llassert_always(!mCurrentFilePoolp); + llassert_always(!mVolatileFilePoolp && !mRegularFilePoolp); - // Access the pool and increment it's reference count. - // The reference count of LLVolatileAPRPool objects will be decremented - // again in LLAPRFile::close by calling mCurrentFilePoolp->clearVolatileAPRPool(). - apr_pool_t* pool; - if (access_type == local) + apr_status_t status; { - // Use a "volatile" thread-local pool. - mCurrentFilePoolp = LLVolatileAPRPool::getLocalAPRFilePool(); - pool = mCurrentFilePoolp->getVolatileAPRPool(); + apr_pool_t* apr_file_open_pool; + if (access_type == local) + { + // Use a "volatile" thread-local pool. + mVolatileFilePoolp = &AIThreadLocalData::tldata().mVolatileAPRPool; + // Access the pool and increment it's reference count. + // The reference count of AIVolatileAPRPool objects will be decremented + // again in LLAPRFile::close by calling mVolatileFilePoolp->clearVolatileAPRPool(). + apr_file_open_pool = mVolatileFilePoolp->getVolatileAPRPool(); + } + else + { + mRegularFilePoolp = new AIAPRPool(AIThreadLocalData::tldata().mRootPool); + apr_file_open_pool = (*mRegularFilePoolp)(); + } + status = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, apr_file_open_pool); } - else - { - llassert(is_main_thread()); - pool = gAPRPoolp; - } - apr_status_t s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, pool); - if (s != APR_SUCCESS || !mFile) + if (status != APR_SUCCESS || !mFile) { mFile = NULL ; close() ; @@ -372,7 +171,7 @@ apr_status_t LLAPRFile::open(std::string const& filename, apr_int32_t flags, acc { *sizep = 0; } - return s; + return status; } if (sizep) @@ -389,7 +188,7 @@ apr_status_t LLAPRFile::open(std::string const& filename, apr_int32_t flags, acc *sizep = file_size; } - return s; + return status; } // File I/O @@ -449,17 +248,6 @@ S32 LLAPRFile::seek(apr_seek_where_t where, S32 offset) //static components of LLAPRFile // -// Used in the static functions below. -class LLScopedVolatileAPRFilePool { -private: - LLVolatileAPRPool* mPool; - apr_pool_t* apr_pool; -public: - LLScopedVolatileAPRFilePool() : mPool(LLVolatileAPRPool::getLocalAPRFilePool()), apr_pool(mPool->getVolatileAPRPool()) { } - ~LLScopedVolatileAPRFilePool() { mPool->clearVolatileAPRPool(); } - operator apr_pool_t*() const { return apr_pool; } -}; - //static S32 LLAPRFile::seek(apr_file_t* file_handle, apr_seek_where_t where, S32 offset) { @@ -496,7 +284,7 @@ S32 LLAPRFile::seek(apr_file_t* file_handle, apr_seek_where_t where, S32 offset) S32 LLAPRFile::readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes) { apr_file_t* file_handle; - LLScopedVolatileAPRFilePool pool; + LLScopedVolatileAPRPool pool; apr_status_t s = apr_file_open(&file_handle, filename.c_str(), APR_READ|APR_BINARY, APR_OS_DEFAULT, pool); if (s != APR_SUCCESS || !file_handle) { @@ -548,7 +336,7 @@ S32 LLAPRFile::writeEx(const std::string& filename, void *buf, S32 offset, S32 n } apr_file_t* file_handle; - LLScopedVolatileAPRFilePool pool; + LLScopedVolatileAPRPool pool; apr_status_t s = apr_file_open(&file_handle, filename.c_str(), flags, APR_OS_DEFAULT, pool); if (s != APR_SUCCESS || !file_handle) { @@ -593,7 +381,7 @@ bool LLAPRFile::remove(const std::string& filename) { apr_status_t s; - LLScopedVolatileAPRFilePool pool; + LLScopedVolatileAPRPool pool; s = apr_file_remove(filename.c_str(), pool); if (s != APR_SUCCESS) @@ -613,7 +401,7 @@ bool LLAPRFile::rename(const std::string& filename, const std::string& newname) { apr_status_t s; - LLScopedVolatileAPRFilePool pool; + LLScopedVolatileAPRPool pool; s = apr_file_rename(filename.c_str(), newname.c_str(), pool); if (s != APR_SUCCESS) @@ -631,7 +419,7 @@ bool LLAPRFile::isExist(const std::string& filename, apr_int32_t flags) apr_file_t* file_handle; apr_status_t s; - LLScopedVolatileAPRFilePool pool; + LLScopedVolatileAPRPool pool; s = apr_file_open(&file_handle, filename.c_str(), flags, APR_OS_DEFAULT, pool); if (s != APR_SUCCESS || !file_handle) @@ -652,7 +440,7 @@ S32 LLAPRFile::size(const std::string& filename) apr_finfo_t info; apr_status_t s; - LLScopedVolatileAPRFilePool pool; + LLScopedVolatileAPRPool pool; s = apr_file_open(&file_handle, filename.c_str(), APR_READ, APR_OS_DEFAULT, pool); if (s != APR_SUCCESS || !file_handle) @@ -681,7 +469,7 @@ bool LLAPRFile::makeDir(const std::string& dirname) { apr_status_t s; - LLScopedVolatileAPRFilePool pool; + LLScopedVolatileAPRPool pool; s = apr_dir_make(dirname.c_str(), APR_FPROT_OS_DEFAULT, pool); if (s != APR_SUCCESS) @@ -698,7 +486,7 @@ bool LLAPRFile::removeDir(const std::string& dirname) { apr_status_t s; - LLScopedVolatileAPRFilePool pool; + LLScopedVolatileAPRPool pool; s = apr_file_remove(dirname.c_str(), pool); if (s != APR_SUCCESS) diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h index 2aed51511..ded15f531 100644 --- a/indra/llcommon/llapr.h +++ b/indra/llcommon/llapr.h @@ -48,73 +48,8 @@ #include "apr_atomic.h" #include "llstring.h" -extern LL_COMMON_API apr_thread_mutex_t* gLogMutexp; - -/** - * @brief initialize the common apr constructs -- apr itself, the - * global pool, and a mutex. - */ -void LL_COMMON_API ll_init_apr(); - -/** - * @brief Cleanup those common apr constructs. - */ -void LL_COMMON_API ll_cleanup_apr(); - -// -//LL apr_pool -//manage apr_pool_t, destroy allocated apr_pool in the destruction function. -// -class LL_COMMON_API LLAPRPool -{ -public: - LLAPRPool(apr_pool_t *parent = NULL, apr_size_t size = 0, BOOL releasePoolFlag = TRUE) ; - ~LLAPRPool() ; - - apr_pool_t* getAPRPool() ; - apr_status_t getStatus() {return mStatus ; } - -protected: - void releaseAPRPool() ; - void createAPRPool() ; - -protected: - apr_pool_t* mPool ; //pointing to an apr_pool - apr_pool_t* mParent ; //parent pool - apr_size_t mMaxSize ; //max size of mPool, mPool should return memory to system if allocated memory beyond this limit. However it seems not to work. - apr_status_t mStatus ; //status when creating the pool - BOOL mReleasePoolFlag ; //if set, mPool is destroyed when LLAPRPool is deleted. default value is true. -}; - -// -//volatile LL apr_pool -//which clears memory automatically. -//so it can not hold static data or data after memory is cleared -// -class LL_COMMON_API LLVolatileAPRPool : protected LLAPRPool -{ -public: - LLVolatileAPRPool(apr_pool_t *parent = NULL, apr_size_t size = 0, BOOL releasePoolFlag = TRUE); - ~LLVolatileAPRPool(){} - - apr_pool_t* getVolatileAPRPool() ; - - void clearVolatileAPRPool() ; - - BOOL isFull() ; - BOOL isEmpty() {return !mNumActiveRef ;} - - static void initLocalAPRFilePool(); - static void createLocalAPRFilePool(); - static void destroyLocalAPRFilePool(void* thread_local_data); - static LLVolatileAPRPool* getLocalAPRFilePool(); - -private: - S32 mNumActiveRef ; //number of active pointers pointing to the apr_pool. - S32 mNumTotalRef ; //number of total pointers pointing to the apr_pool since last creating. - - static apr_threadkey_t* sLocalAPRFilePoolKey; -} ; +class AIAPRPool; +class AIVolatileAPRPool; /** * @class LLScopedLock @@ -205,7 +140,8 @@ class LL_COMMON_API LLAPRFile : boost::noncopyable // make this non copyable since a copy closes the file private: apr_file_t* mFile ; - LLVolatileAPRPool *mCurrentFilePoolp ; //currently in use apr_pool, could be one of them: sAPRFilePoolp, or a temp pool. + AIVolatileAPRPool* mVolatileFilePoolp; // (Thread local) APR pool currently in use. + AIAPRPool* mRegularFilePoolp; // ...or a regular pool. public: enum access_t { @@ -260,6 +196,4 @@ bool LL_COMMON_API ll_apr_warn_status(apr_status_t status); void LL_COMMON_API ll_apr_assert_status(apr_status_t status); -extern "C" LL_COMMON_API apr_pool_t* gAPRPoolp; // Global APR memory pool - #endif // LL_LLAPR_H diff --git a/indra/llcommon/llcommon.cpp b/indra/llcommon/llcommon.cpp index 2cbb71855..298dd4695 100644 --- a/indra/llcommon/llcommon.cpp +++ b/indra/llcommon/llcommon.cpp @@ -34,18 +34,10 @@ #include "llcommon.h" #include "llthread.h" -//static -BOOL LLCommon::sAprInitialized = FALSE; - //static void LLCommon::initClass() { LLMemory::initClass(); - if (!sAprInitialized) - { - ll_init_apr(); - sAprInitialized = TRUE; - } LLTimer::initClass(); LLThreadSafeRefCount::initThreadSafeRefCount(); // LLWorkerThread::initClass(); @@ -59,10 +51,5 @@ void LLCommon::cleanupClass() // LLWorkerThread::cleanupClass(); LLThreadSafeRefCount::cleanupThreadSafeRefCount(); LLTimer::cleanupClass(); - if (sAprInitialized) - { - ll_cleanup_apr(); - sAprInitialized = FALSE; - } LLMemory::cleanupClass(); } diff --git a/indra/llcommon/llcommon.h b/indra/llcommon/llcommon.h index 851d4ac2d..300ebe2b2 100644 --- a/indra/llcommon/llcommon.h +++ b/indra/llcommon/llcommon.h @@ -43,8 +43,6 @@ class LL_COMMON_API LLCommon public: static void initClass(); static void cleanupClass(); -private: - static BOOL sAprInitialized; }; #endif diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index e549979f0..56495e666 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -877,6 +877,9 @@ You get: */ +apr_thread_mutex_t* gLogMutexp; +apr_thread_mutex_t* gCallStacksLogMutexp; + namespace { bool checkLevelMap(const LevelMap& map, const std::string& key, LLError::ELevel& level) diff --git a/indra/llcommon/llfixedbuffer.cpp b/indra/llcommon/llfixedbuffer.cpp index 1f6a06c24..08be3e259 100644 --- a/indra/llcommon/llfixedbuffer.cpp +++ b/indra/llcommon/llfixedbuffer.cpp @@ -36,8 +36,7 @@ LLFixedBuffer::LLFixedBuffer(const U32 max_lines) : LLLineBuffer(), - mMaxLines(max_lines), - mMutex(NULL) + mMaxLines(max_lines) { mTimer.reset(); } diff --git a/indra/llcommon/llscopedvolatileaprpool.h b/indra/llcommon/llscopedvolatileaprpool.h new file mode 100644 index 000000000..724dc7f05 --- /dev/null +++ b/indra/llcommon/llscopedvolatileaprpool.h @@ -0,0 +1,58 @@ +/** + * @file llscopedvolatileaprpool.h + * @brief Implementation of LLScopedVolatileAPRPool + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLSCOPEDVOLATILEAPRPOOL_H +#define LL_LLSCOPEDVOLATILEAPRPOOL_H + +#include "llthread.h" + +//! Scoped volatile memory pool. +// +// As the AIVolatileAPRPool should never keep allocations very +// long, it's most common use is for allocations with a lifetime +// equal to it's scope. +// +// This is a convenience class that makes just a little easier to type. +// +class LLScopedVolatileAPRPool +{ +private: + AIVolatileAPRPool& mPool; + apr_pool_t* mScopedAPRpool; +public: + LLScopedVolatileAPRPool() : mPool(AIThreadLocalData::tldata().mVolatileAPRPool), mScopedAPRpool(mPool.getVolatileAPRPool()) { } + ~LLScopedVolatileAPRPool() { mPool.clearVolatileAPRPool(); } + // Only use this to pass the pointer to a libapr-1 function that requires it. + operator apr_pool_t*() const { return mScopedAPRpool; } +}; + +#endif diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index 9b74e1d1d..7ced30939 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -72,8 +72,8 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap // Set thread state to running threadp->mStatus = RUNNING; - // Create a thread local APRFile pool. - LLVolatileAPRPool::createLocalAPRFilePool(); + // Create a thread local data. + AIThreadLocalData::create(threadp); // Run the user supplied function threadp->run(); @@ -87,24 +87,14 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap } -LLThread::LLThread(const std::string& name, apr_pool_t *poolp) : +LLThread::LLThread(std::string const& name) : mPaused(FALSE), mName(name), mAPRThreadp(NULL), - mStatus(STOPPED) + mStatus(STOPPED), + mThreadLocalData(NULL) { - // Thread creation probably CAN be paranoid about APR being initialized, if necessary - if (poolp) - { - mIsLocalPool = FALSE; - mAPRPoolp = poolp; - } - else - { - mIsLocalPool = TRUE; - apr_pool_create(&mAPRPoolp, NULL); // Create a subpool for this thread - } - mRunCondition = new LLCondition(mAPRPoolp); + mRunCondition = new LLCondition; } @@ -147,24 +137,18 @@ void LLThread::shutdown() if (!isStopped()) { // This thread just wouldn't stop, even though we gave it time - llwarns << "LLThread::~LLThread() exiting thread before clean exit!" << llendl; + llwarns << "LLThread::shutdown() exiting thread before clean exit!" << llendl; return; } mAPRThreadp = NULL; } delete mRunCondition; - - if (mIsLocalPool) - { - apr_pool_destroy(mAPRPoolp); - } } - void LLThread::start() { - apr_thread_create(&mAPRThreadp, NULL, staticRun, (void *)this, mAPRPoolp); + apr_thread_create(&mAPRThreadp, NULL, staticRun, (void *)this, tldata().mRootPool()); // We won't bother joining apr_thread_detach(mAPRThreadp); @@ -265,38 +249,72 @@ void LLThread::wakeLocked() } } +#ifdef SHOW_ASSERT +// This allows the use of llassert(is_main_thread()) to assure the current thread is the main thread. +static apr_os_thread_t main_thread_id; +LL_COMMON_API bool is_main_thread() { return apr_os_thread_equal(main_thread_id, apr_os_thread_current()); } +#endif + +// The thread private handle to access the AIThreadLocalData instance. +apr_threadkey_t* AIThreadLocalData::sThreadLocalDataKey; + +//static +void AIThreadLocalData::init(void) +{ + // Only do this once. + if (sThreadLocalDataKey) + { + return; + } + + apr_status_t status = apr_threadkey_private_create(&sThreadLocalDataKey, &AIThreadLocalData::destroy, AIAPRRootPool::get()()); + ll_apr_assert_status(status); // Or out of memory, or system-imposed limit on the + // total number of keys per process {PTHREAD_KEYS_MAX} + // has been exceeded. + + // Create the thread-local data for the main thread (this function is called by the main thread). + AIThreadLocalData::create(NULL); + +#ifdef SHOW_ASSERT + // This function is called by the main thread. + main_thread_id = apr_os_thread_current(); +#endif +} + +// This is called once for every thread when the thread is destructed. +//static +void AIThreadLocalData::destroy(void* thread_local_data) +{ + delete reinterpret_cast(thread_local_data); +} + +//static +void AIThreadLocalData::create(LLThread* threadp) +{ + AIThreadLocalData* new_tld = new AIThreadLocalData; + if (threadp) + { + threadp->mThreadLocalData = new_tld; + } + apr_status_t status = apr_threadkey_private_set(new_tld, sThreadLocalDataKey); + llassert_always(status == APR_SUCCESS); +} + +//static +AIThreadLocalData& AIThreadLocalData::tldata(void) +{ + if (!sThreadLocalDataKey) + AIThreadLocalData::init(); + + void* data; + apr_status_t status = apr_threadkey_private_get(&data, sThreadLocalDataKey); + llassert_always(status == APR_SUCCESS); + return *static_cast(data); +} + //============================================================================ -LLMutex::LLMutex(apr_pool_t *poolp) : - mAPRMutexp(NULL) -{ - //if (poolp) - //{ - // mIsLocalPool = FALSE; - // mAPRPoolp = poolp; - //} - //else - { - mIsLocalPool = TRUE; - apr_pool_create(&mAPRPoolp, NULL); // Create a subpool for this thread - } - apr_thread_mutex_create(&mAPRMutexp, APR_THREAD_MUTEX_UNNESTED, mAPRPoolp); -} - -LLMutex::~LLMutex() -{ -#if _DEBUG - llassert(!isLocked()); // better not be locked! -#endif - apr_thread_mutex_destroy(mAPRMutexp); - mAPRMutexp = NULL; - if (mIsLocalPool) - { - apr_pool_destroy(mAPRPoolp); - } -} - -bool LLMutex::isLocked() +bool LLMutexBase::isLocked() { if (!tryLock()) { @@ -308,12 +326,9 @@ bool LLMutex::isLocked() //============================================================================ -LLCondition::LLCondition(apr_pool_t *poolp) : - LLMutex(poolp) +LLCondition::LLCondition(AIAPRPool& parent) : LLMutex(parent) { - // base class (LLMutex) has already ensured that mAPRPoolp is set up. - - apr_thread_cond_create(&mAPRCondp, mAPRPoolp); + apr_thread_cond_create(&mAPRCondp, mPool()); } LLCondition::~LLCondition() @@ -349,7 +364,7 @@ void LLThreadSafeRefCount::initThreadSafeRefCount() { if (!sMutex) { - sMutex = new LLMutex(0); + sMutex = new LLMutex; } } diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h index 399f0f741..8fa1b59ae 100644 --- a/indra/llcommon/llthread.h +++ b/indra/llcommon/llthread.h @@ -38,11 +38,32 @@ #include "llmemory.h" #include "apr_thread_cond.h" +#include "aiaprpool.h" + +#ifdef SHOW_ASSERT +extern bool is_main_thread(void); +#endif class LLThread; class LLMutex; class LLCondition; +class LL_COMMON_API AIThreadLocalData +{ +private: + static apr_threadkey_t* sThreadLocalDataKey; + +public: + // Thread-local memory pool. + AIAPRRootPool mRootPool; + AIVolatileAPRPool mVolatileAPRPool; + + static void init(void); + static void destroy(void* thread_local_data); + static void create(LLThread* pthread); + static AIThreadLocalData& tldata(void); +}; + class LL_COMMON_API LLThread { public: @@ -53,7 +74,7 @@ public: QUITTING= 2 // Someone wants this thread to quit } EThreadStatus; - LLThread(const std::string& name, apr_pool_t *poolp = NULL); + LLThread(std::string const& name); virtual ~LLThread(); // Warning! You almost NEVER want to destroy a thread unless it's in the STOPPED state. virtual void shutdown(); // stops the thread @@ -82,7 +103,8 @@ public: // this kicks off the apr thread void start(void); - apr_pool_t *getAPRPool() { return mAPRPoolp; } + // Return thread-local data for the current thread. + static AIThreadLocalData& tldata(void) { return AIThreadLocalData::tldata(); } private: BOOL mPaused; @@ -95,10 +117,11 @@ protected: LLCondition* mRunCondition; apr_thread_t *mAPRThreadp; - apr_pool_t *mAPRPoolp; - BOOL mIsLocalPool; EThreadStatus mStatus; + friend void AIThreadLocalData::create(LLThread* threadp); + AIThreadLocalData* mThreadLocalData; + void setQuitting(); // virtual function overridden by subclass -- this will be called when the thread runs @@ -125,12 +148,9 @@ protected: //============================================================================ -class LL_COMMON_API LLMutex +class LL_COMMON_API LLMutexBase { public: - LLMutex(apr_pool_t *apr_poolp); // NULL pool constructs a new pool for the mutex - ~LLMutex(); - void lock() { apr_thread_mutex_lock(mAPRMutexp); } void unlock() { apr_thread_mutex_unlock(mAPRMutexp); } // Returns true if lock was obtained successfully. @@ -139,16 +159,60 @@ public: bool isLocked(); // non-blocking, but does do a lock/unlock so not free protected: - apr_thread_mutex_t *mAPRMutexp; - apr_pool_t *mAPRPoolp; - BOOL mIsLocalPool; + // mAPRMutexp is initialized and uninitialized in the derived class. + apr_thread_mutex_t* mAPRMutexp; }; +class LL_COMMON_API LLMutex : public LLMutexBase +{ +public: + LLMutex(AIAPRPool& parent = LLThread::tldata().mRootPool) : mPool(parent) + { + apr_thread_mutex_create(&mAPRMutexp, APR_THREAD_MUTEX_UNNESTED, mPool()); + } + ~LLMutex() + { + llassert(!isLocked()); // better not be locked! + apr_thread_mutex_destroy(mAPRMutexp); + mAPRMutexp = NULL; + } + +protected: + AIAPRPool mPool; +}; + +#if APR_HAS_THREADS +// No need to use a root pool in this case. +typedef LLMutex LLMutexRootPool; +#else // APR_HAS_THREADS +class LL_COMMON_API LLMutexRootPool : public LLMutexBase +{ +public: + LLMutexRootPool(void) + { + apr_thread_mutex_create(&mAPRMutexp, APR_THREAD_MUTEX_UNNESTED, mRootPool()); + } + ~LLMutexRootPool() + { +#if APR_POOL_DEBUG + // It is allowed to destruct root pools from a different thread. + mRootPool.grab_ownership(); +#endif + llassert(!isLocked()); // better not be locked! + apr_thread_mutex_destroy(mAPRMutexp); + mAPRMutexp = NULL; + } + +protected: + AIAPRRootPool mRootPool; +}; +#endif // APR_HAS_THREADS + // Actually a condition/mutex pair (since each condition needs to be associated with a mutex). class LL_COMMON_API LLCondition : public LLMutex { public: - LLCondition(apr_pool_t *apr_poolp); // Defaults to global pool, could use the thread pool as well. + LLCondition(AIAPRPool& parent = LLThread::tldata().mRootPool); ~LLCondition(); void wait(); // blocks @@ -162,7 +226,7 @@ protected: class LL_COMMON_API LLMutexLock { public: - LLMutexLock(LLMutex* mutex) + LLMutexLock(LLMutexBase* mutex) { mMutex = mutex; mMutex->lock(); @@ -172,7 +236,7 @@ public: mMutex->unlock(); } private: - LLMutex* mMutex; + LLMutexBase* mMutex; }; //============================================================================ diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp index c4be02818..65f27095b 100644 --- a/indra/llcommon/llworkerthread.cpp +++ b/indra/llcommon/llworkerthread.cpp @@ -43,7 +43,7 @@ LLWorkerThread::LLWorkerThread(const std::string& name, bool threaded) : LLQueuedThread(name, threaded) { - mDeleteMutex = new LLMutex(NULL); + mDeleteMutex = new LLMutex; } LLWorkerThread::~LLWorkerThread() @@ -205,7 +205,6 @@ LLWorkerClass::LLWorkerClass(LLWorkerThread* workerthread, const std::string& na mRequestPriority(LLWorkerThread::PRIORITY_NORMAL), mWorkerClassName(name), mRequestHandle(LLWorkerThread::nullHandle()), - mMutex(NULL), mWorkFlags(0) { if (!mWorkerThread) diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h index 3d761dc87..117dc05cc 100644 --- a/indra/llcommon/llworkerthread.h +++ b/indra/llcommon/llworkerthread.h @@ -200,7 +200,7 @@ protected: U32 mRequestPriority; // last priority set private: - LLMutex mMutex; + LLMutexRootPool mMutex; // Use LLMutexRootPool since this object is created and destructed by multiple threads. LLAtomicU32 mWorkFlags; }; diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp index 804c51274..3dc41e897 100644 --- a/indra/llcrashlogger/llcrashlogger.cpp +++ b/indra/llcrashlogger/llcrashlogger.cpp @@ -387,8 +387,7 @@ bool LLCrashLogger::init() return false; } - gServicePump = new LLPumpIO(gAPRPoolp); - gServicePump->prime(gAPRPoolp); + gServicePump = new LLPumpIO; LLHTTPClient::setPump(*gServicePump); //If we've opened the crash logger, assume we can delete the marker file if it exists diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index 546a16d16..3f3dbc87c 100644 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -57,7 +57,7 @@ LLMutex* LLImage::sMutex = NULL; //static void LLImage::initClass() { - sMutex = new LLMutex(NULL); + sMutex = new LLMutex; LLImageJ2C::openDSO(); } diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp index 08bcde633..14917fadf 100644 --- a/indra/llimage/llimagej2c.cpp +++ b/indra/llimage/llimagej2c.cpp @@ -46,7 +46,7 @@ typedef const char* (*EngineInfoLLImageJ2CFunction)(); CreateLLImageJ2CFunction j2cimpl_create_func; DestroyLLImageJ2CFunction j2cimpl_destroy_func; EngineInfoLLImageJ2CFunction j2cimpl_engineinfo_func; -apr_pool_t *j2cimpl_dso_memory_pool; +AIAPRPool j2cimpl_dso_memory_pool; apr_dso_handle_t *j2cimpl_dso_handle; //Declare the prototype for theses functions here, their functionality @@ -81,13 +81,12 @@ void LLImageJ2C::openDSO() gDirUtilp->getExecutableDir()); j2cimpl_dso_handle = NULL; - j2cimpl_dso_memory_pool = NULL; + j2cimpl_dso_memory_pool.create(); //attempt to load the shared library - apr_pool_create(&j2cimpl_dso_memory_pool, NULL); rv = apr_dso_load(&j2cimpl_dso_handle, dso_path.c_str(), - j2cimpl_dso_memory_pool); + j2cimpl_dso_memory_pool()); //now, check for success if ( rv == APR_SUCCESS ) @@ -151,11 +150,7 @@ void LLImageJ2C::openDSO() j2cimpl_dso_handle = NULL; } - if ( j2cimpl_dso_memory_pool ) - { - apr_pool_destroy(j2cimpl_dso_memory_pool); - j2cimpl_dso_memory_pool = NULL; - } + j2cimpl_dso_memory_pool.destroy(); } } @@ -163,7 +158,7 @@ void LLImageJ2C::openDSO() void LLImageJ2C::closeDSO() { if ( j2cimpl_dso_handle ) apr_dso_unload(j2cimpl_dso_handle); - if (j2cimpl_dso_memory_pool) apr_pool_destroy(j2cimpl_dso_memory_pool); + j2cimpl_dso_memory_pool.destroy(); } //static diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp index aceebf781..79353d55b 100644 --- a/indra/llimage/llimageworker.cpp +++ b/indra/llimage/llimageworker.cpp @@ -41,20 +41,13 @@ LLImageDecodeThread::LLImageDecodeThread(bool threaded) : LLQueuedThread("imagedecode", threaded) { - mCreationMutex = new LLMutex(getAPRPool()); -} - -//virtual -LLImageDecodeThread::~LLImageDecodeThread() -{ - delete mCreationMutex ; } // MAIN THREAD // virtual S32 LLImageDecodeThread::update(U32 max_time_ms) { - LLMutexLock lock(mCreationMutex); + LLMutexLock lock(&mCreationMutex); for (creation_list_t::iterator iter = mCreationList.begin(); iter != mCreationList.end(); ++iter) { @@ -77,7 +70,7 @@ S32 LLImageDecodeThread::update(U32 max_time_ms) LLImageDecodeThread::handle_t LLImageDecodeThread::decodeImage(LLImageFormatted* image, U32 priority, S32 discard, BOOL needs_aux, Responder* responder) { - LLMutexLock lock(mCreationMutex); + LLMutexLock lock(&mCreationMutex); handle_t handle = generateHandle(); mCreationList.push_back(creation_info(handle, image, priority, discard, needs_aux, responder)); return handle; @@ -87,7 +80,7 @@ LLImageDecodeThread::handle_t LLImageDecodeThread::decodeImage(LLImageFormatted* // Returns the size of the mutex guarded list as an indication of sanity S32 LLImageDecodeThread::tut_size() { - LLMutexLock lock(mCreationMutex); + LLMutexLock lock(&mCreationMutex); S32 res = mCreationList.size(); return res; } diff --git a/indra/llimage/llimageworker.h b/indra/llimage/llimageworker.h index 9a09f81bc..2703af497 100644 --- a/indra/llimage/llimageworker.h +++ b/indra/llimage/llimageworker.h @@ -78,8 +78,6 @@ public: public: LLImageDecodeThread(bool threaded = true); - virtual ~LLImageDecodeThread(); - handle_t decodeImage(LLImageFormatted* image, U32 priority, S32 discard, BOOL needs_aux, Responder* responder); @@ -103,7 +101,7 @@ private: }; typedef std::list creation_list_t; creation_list_t mCreationList; - LLMutex* mCreationMutex; + LLMutex mCreationMutex; }; #endif diff --git a/indra/llmath/llvolumemgr.cpp b/indra/llmath/llvolumemgr.cpp index 53641fcea..8bfebcb42 100644 --- a/indra/llmath/llvolumemgr.cpp +++ b/indra/llmath/llvolumemgr.cpp @@ -55,7 +55,7 @@ LLVolumeMgr::LLVolumeMgr() { // the LLMutex magic interferes with easy unit testing, // so you now must manually call useMutex() to use it - //mDataMutex = new LLMutex(gAPRPoolp); + //mDataMutex = new LLMutex; } LLVolumeMgr::~LLVolumeMgr() @@ -222,7 +222,7 @@ void LLVolumeMgr::useMutex() { if (!mDataMutex) { - mDataMutex = new LLMutex(gAPRPoolp); + mDataMutex = new LLMutex; } } diff --git a/indra/llmessage/llares.cpp b/indra/llmessage/llares.cpp index 7a2dc6cc3..93079f537 100644 --- a/indra/llmessage/llares.cpp +++ b/indra/llmessage/llares.cpp @@ -44,6 +44,7 @@ #include "llapr.h" #define CARES_STATICLIB #include "llares.h" +#include "llscopedvolatileaprpool.h" #if defined(LL_WINDOWS) # define ns_c_in 1 @@ -467,11 +468,6 @@ void LLAres::search(const std::string &query, LLResType type, bool LLAres::process(U64 timeout) { - if (!gAPRPoolp) - { - ll_init_apr(); - } - ares_socket_t socks[ARES_GETSOCK_MAXNUM]; apr_pollfd_t aprFds[ARES_GETSOCK_MAXNUM]; apr_int32_t nsds = 0; @@ -485,10 +481,7 @@ bool LLAres::process(U64 timeout) return nsds > 0; } - apr_status_t status; - LLAPRPool pool; - status = pool.getStatus() ; - ll_apr_assert_status(status); + LLScopedVolatileAPRPool scoped_pool; for (int i = 0; i < ARES_GETSOCK_MAXNUM; i++) { @@ -505,7 +498,7 @@ bool LLAres::process(U64 timeout) apr_socket_t *aprSock = NULL; - status = apr_os_sock_put(&aprSock, (apr_os_sock_t *) &socks[i], pool.getAPRPool()); + apr_status_t status = apr_os_sock_put(&aprSock, (apr_os_sock_t *) &socks[i], scoped_pool); if (status != APR_SUCCESS) { ll_apr_warn_status(status); @@ -514,7 +507,7 @@ bool LLAres::process(U64 timeout) aprFds[nactive].desc.s = aprSock; aprFds[nactive].desc_type = APR_POLL_SOCKET; - aprFds[nactive].p = pool.getAPRPool(); + aprFds[nactive].p = scoped_pool; aprFds[nactive].rtnevents = 0; aprFds[nactive].client_data = &socks[i]; @@ -523,7 +516,7 @@ bool LLAres::process(U64 timeout) if (nactive > 0) { - status = apr_poll(aprFds, nactive, &nsds, timeout); + apr_status_t status = apr_poll(aprFds, nactive, &nsds, timeout); if (status != APR_SUCCESS && status != APR_TIMEUP) { diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index f43bafd45..38b2bea1b 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -1082,7 +1082,7 @@ void LLCurl::initClass() S32 mutex_count = CRYPTO_num_locks(); for (S32 i=0; i factory_ptr(factory); - LLIOServerSocket* server = new LLIOServerSocket(pool, socket, factory_ptr); + LLIOServerSocket* server = new LLIOServerSocket(socket, factory_ptr); LLPumpIO::chain_t chain; chain.push_back(LLIOPipe::ptr_t(server)); diff --git a/indra/llmessage/lliohttpserver.h b/indra/llmessage/lliohttpserver.h index e8e390f29..66e763444 100644 --- a/indra/llmessage/lliohttpserver.h +++ b/indra/llmessage/lliohttpserver.h @@ -56,7 +56,7 @@ class LLIOHTTPServer public: typedef void (*timing_callback_t)(const char* hashed_name, F32 time, void* data); - static LLHTTPNode& create(apr_pool_t* pool, LLPumpIO& pump, U16 port); + static LLHTTPNode& create(LLPumpIO& pump, U16 port); /**< Creates an HTTP wire server on the pump for the given TCP port. * * Returns the root node of the new server. Add LLHTTPNode instances diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp index 7ec577c7b..686c03742 100644 --- a/indra/llmessage/lliosocket.cpp +++ b/indra/llmessage/lliosocket.cpp @@ -41,6 +41,7 @@ #include "llhost.h" #include "llmemtype.h" #include "llpumpio.h" +#include "llthread.h" // // constants @@ -104,51 +105,31 @@ void ll_debug_socket(const char* msg, apr_socket_t* apr_sock) /// // static -LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port) +LLSocket::ptr_t LLSocket::create(EType type, U16 port) { LLMemType m1(LLMemType::MTYPE_IO_TCP); - LLSocket::ptr_t rv; - apr_socket_t* socket = NULL; - apr_pool_t* new_pool = NULL; apr_status_t status = APR_EGENERAL; - - // create a pool for the socket - status = apr_pool_create(&new_pool, pool); - if(ll_apr_warn_status(status)) - { - if(new_pool) apr_pool_destroy(new_pool); - return rv; - } + LLSocket::ptr_t rv(new LLSocket); if(STREAM_TCP == type) { - status = apr_socket_create( - &socket, - APR_INET, - SOCK_STREAM, - APR_PROTO_TCP, - new_pool); + status = apr_socket_create(&rv->mSocket, APR_INET, SOCK_STREAM, APR_PROTO_TCP, rv->mPool()); } else if(DATAGRAM_UDP == type) { - status = apr_socket_create( - &socket, - APR_INET, - SOCK_DGRAM, - APR_PROTO_UDP, - new_pool); + status = apr_socket_create(&rv->mSocket, APR_INET, SOCK_DGRAM, APR_PROTO_UDP, rv->mPool()); } else { - if(new_pool) apr_pool_destroy(new_pool); + rv.reset(); return rv; } if(ll_apr_warn_status(status)) { - if(new_pool) apr_pool_destroy(new_pool); + rv->mSocket = NULL; + rv.reset(); return rv; } - rv = ptr_t(new LLSocket(socket, new_pool)); if(port > 0) { apr_sockaddr_t* sa = NULL; @@ -158,7 +139,7 @@ LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port) APR_UNSPEC, port, 0, - new_pool); + rv->mPool()); if(ll_apr_warn_status(status)) { rv.reset(); @@ -166,8 +147,8 @@ LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port) } // This allows us to reuse the address on quick down/up. This // is unlikely to create problems. - ll_apr_warn_status(apr_socket_opt_set(socket, APR_SO_REUSEADDR, 1)); - status = apr_socket_bind(socket, sa); + ll_apr_warn_status(apr_socket_opt_set(rv->mSocket, APR_SO_REUSEADDR, 1)); + status = apr_socket_bind(rv->mSocket, sa); if(ll_apr_warn_status(status)) { rv.reset(); @@ -181,7 +162,7 @@ LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port) // to keep a queue of incoming connections for ACCEPT. lldebugs << "Setting listen state for socket." << llendl; status = apr_socket_listen( - socket, + rv->mSocket, LL_DEFAULT_LISTEN_BACKLOG); if(ll_apr_warn_status(status)) { @@ -202,21 +183,28 @@ LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port) } // static -LLSocket::ptr_t LLSocket::create(apr_socket_t* socket, apr_pool_t* pool) +LLSocket::ptr_t LLSocket::create(apr_status_t& status, LLSocket::ptr_t& listen_socket) { LLMemType m1(LLMemType::MTYPE_IO_TCP); - LLSocket::ptr_t rv; - if(!socket) + if (!listen_socket->getSocket()) { + status = APR_ENOSOCKET; + return LLSocket::ptr_t(); + } + LLSocket::ptr_t rv(new LLSocket); + lldebugs << "accepting socket" << llendl; + status = apr_socket_accept(&rv->mSocket, listen_socket->getSocket(), rv->mPool()); + if (status != APR_SUCCESS) + { + rv->mSocket = NULL; + rv.reset(); return rv; } - rv = ptr_t(new LLSocket(socket, pool)); rv->mPort = PORT_EPHEMERAL; rv->setOptions(); return rv; } - bool LLSocket::blockingConnect(const LLHost& host) { if(!mSocket) return false; @@ -229,7 +217,7 @@ bool LLSocket::blockingConnect(const LLHost& host) APR_UNSPEC, host.getPort(), 0, - mPool))) + mPool()))) { return false; } @@ -240,13 +228,11 @@ bool LLSocket::blockingConnect(const LLHost& host) return true; } -LLSocket::LLSocket(apr_socket_t* socket, apr_pool_t* pool) : - mSocket(socket), - mPool(pool), +LLSocket::LLSocket() : + mSocket(NULL), + mPool(LLThread::tldata().mRootPool), mPort(PORT_INVALID) { - ll_debug_socket("Constructing wholely formed socket", mSocket); - LLMemType m1(LLMemType::MTYPE_IO_TCP); } LLSocket::~LLSocket() @@ -258,10 +244,6 @@ LLSocket::~LLSocket() ll_debug_socket("Destroying socket", mSocket); apr_socket_close(mSocket); } - if(mPool) - { - apr_pool_destroy(mPool); - } } void LLSocket::setOptions() @@ -522,10 +504,8 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl( /// LLIOServerSocket::LLIOServerSocket( - apr_pool_t* pool, LLIOServerSocket::socket_t listener, factory_t factory) : - mPool(pool), mListenSocket(listener), mReactor(factory), mInitialized(false), @@ -585,21 +565,15 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl( lldebugs << "accepting socket" << llendl; PUMP_DEBUG; - apr_pool_t* new_pool = NULL; - apr_status_t status = apr_pool_create(&new_pool, mPool); - apr_socket_t* socket = NULL; - status = apr_socket_accept( - &socket, - mListenSocket->getSocket(), - new_pool); - LLSocket::ptr_t llsocket(LLSocket::create(socket, new_pool)); + apr_status_t status; + LLSocket::ptr_t llsocket(LLSocket::create(status, mListenSocket)); //EStatus rv = STATUS_ERROR; - if(llsocket) + if(llsocket && status == APR_SUCCESS) { PUMP_DEBUG; apr_sockaddr_t* remote_addr; - apr_socket_addr_get(&remote_addr, APR_REMOTE, socket); + apr_socket_addr_get(&remote_addr, APR_REMOTE, llsocket->getSocket()); char* remote_host_string; apr_sockaddr_ip_get(&remote_host_string, remote_addr); @@ -614,7 +588,6 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl( { chain.push_back(LLIOPipe::ptr_t(new LLIOSocketWriter(llsocket))); pump->addChain(chain, mResponseTimeout); - status = STATUS_OK; } else { @@ -623,7 +596,8 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl( } else { - llwarns << "Unable to create linden socket." << llendl; + char buf[256]; + llwarns << "Unable to accept linden socket: " << apr_strerror(status, buf, sizeof(buf)) << llendl; } PUMP_DEBUG; @@ -636,11 +610,10 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl( #if 0 LLIODataSocket::LLIODataSocket( U16 suggested_port, - U16 start_discovery_port, - apr_pool_t* pool) : + U16 start_discovery_port) : mSocket(NULL) { - if(!pool || (PORT_INVALID == suggested_port)) return; + if(PORT_INVALID == suggested_port) return; if(ll_apr_warn_status(apr_socket_create(&mSocket, APR_INET, SOCK_DGRAM, APR_PROTO_UDP, pool))) return; apr_sockaddr_t* sa = NULL; if(ll_apr_warn_status(apr_sockaddr_info_get(&sa, APR_ANYADDR, APR_UNSPEC, suggested_port, 0, pool))) return; diff --git a/indra/llmessage/lliosocket.h b/indra/llmessage/lliosocket.h index ec09ad8ba..5ad75e909 100644 --- a/indra/llmessage/lliosocket.h +++ b/indra/llmessage/lliosocket.h @@ -44,7 +44,6 @@ */ #include "lliopipe.h" -#include "apr_pools.h" #include "apr_network_io.h" #include "llchainio.h" @@ -94,34 +93,22 @@ public: * socket. If you intend the socket to be known to external * clients without prior port notification, do not use * PORT_EPHEMERAL. - * @param pool The apr pool to use. A child pool will be created - * and associated with the socket. * @param type The type of socket to create * @param port The port for the socket * @return A valid socket shared pointer if the call worked. */ static ptr_t create( - apr_pool_t* pool, EType type, U16 port = PORT_EPHEMERAL); /** - * @brief Create a LLSocket when you already have an apr socket. + * @brief Create a LLSocket by accepting a connection from a listen socket. * - * This method assumes an ephemeral port. This is typically used - * by calls which spawn a socket such as a call to - * accept() as in the server socket. This call should - * not fail if you have a valid apr socket. - * Because of the nature of how accept() works, you are expected - * to create a new pool for the socket, use that pool for the - * accept, and pass it in here where it will be bound with the - * socket and destroyed at the same time. - * @param socket The apr socket to use - * @param pool The pool used to create the socket. *NOTE: The pool - * passed in will be DESTROYED. + * @param status Output. Status of the accept if a valid listen socket was passed. + * @param listen_socket The listen socket to use. * @return A valid socket shared pointer if the call worked. */ - static ptr_t create(apr_socket_t* socket, apr_pool_t* pool); + static ptr_t create(apr_status_t& status, ptr_t& listen_socket); /** * @brief Perform a blocking connect to a host. Do not use in production. @@ -156,7 +143,7 @@ protected: * @brief Protected constructor since should only make sockets * with one of the two create() calls. */ - LLSocket(apr_socket_t* socket, apr_pool_t* pool); + LLSocket(void); /** * @brief Set default socket options. @@ -173,8 +160,8 @@ protected: // The apr socket. apr_socket_t* mSocket; - // our memory pool - apr_pool_t* mPool; + // Our memory pool. + AIAPRPool mPool; // The port if we know it. U16 mPort; @@ -299,7 +286,7 @@ class LLIOServerSocket : public LLIOPipe public: typedef LLSocket::ptr_t socket_t; typedef boost::shared_ptr factory_t; - LLIOServerSocket(apr_pool_t* pool, socket_t listener, factory_t reactor); + LLIOServerSocket(socket_t listener, factory_t reactor); virtual ~LLIOServerSocket(); /** @@ -331,7 +318,6 @@ protected: //@} protected: - apr_pool_t* mPool; socket_t mListenSocket; factory_t mReactor; bool mInitialized; @@ -365,8 +351,7 @@ public: */ LLIODataSocket( U16 suggested_port, - U16 start_discovery_port, - apr_pool_t* pool); + U16 start_discovery_port); virtual ~LLIODataSocket(); protected: diff --git a/indra/llmessage/llmail.cpp b/indra/llmessage/llmail.cpp index ce206d8d7..e55a1bb41 100644 --- a/indra/llmessage/llmail.cpp +++ b/indra/llmessage/llmail.cpp @@ -56,6 +56,7 @@ #include "llstring.h" #include "lluuid.h" #include "net.h" +#include "aiaprpool.h" // // constants @@ -63,7 +64,7 @@ const size_t LL_MAX_KNOWN_GOOD_MAIL_SIZE = 4096; static bool gMailEnabled = true; -static apr_pool_t* gMailPool; +static AIAPRPool gMailPool; static apr_sockaddr_t* gSockAddr; static apr_socket_t* gMailSocket; @@ -88,7 +89,7 @@ bool connect_smtp() gSockAddr->sa.sin.sin_family, SOCK_STREAM, APR_PROTO_TCP, - gMailPool); + gMailPool()); if(ll_apr_warn_status(status)) return false; status = apr_socket_connect(gMailSocket, gSockAddr); if(ll_apr_warn_status(status)) @@ -145,19 +146,19 @@ BOOL LLMail::send( } // static -void LLMail::init(const std::string& hostname, apr_pool_t* pool) +void LLMail::init(const std::string& hostname) { gMailSocket = NULL; - if(hostname.empty() || !pool) + if (hostname.empty()) { - gMailPool = NULL; gSockAddr = NULL; + gMailPool.destroy(); } else { - gMailPool = pool; + gMailPool.create(); - // collect all the information into a socaddr sturcture. the + // Collect all the information into a sockaddr structure. the // documentation is a bit unclear, but I either have to // specify APR_UNSPEC or not specify any flags. I am not sure // which option is better. @@ -167,7 +168,7 @@ void LLMail::init(const std::string& hostname, apr_pool_t* pool) APR_UNSPEC, 25, APR_IPV4_ADDR_OK, - gMailPool); + gMailPool()); ll_apr_warn_status(status); } } diff --git a/indra/llmessage/llmail.h b/indra/llmessage/llmail.h index 7effb847a..7026d93b3 100644 --- a/indra/llmessage/llmail.h +++ b/indra/llmessage/llmail.h @@ -33,15 +33,13 @@ #ifndef LL_LLMAIL_H #define LL_LLMAIL_H -typedef struct apr_pool_t apr_pool_t; - #include "llsd.h" class LLMail { public: // if hostname is NULL, then the host is resolved as 'mail' - static void init(const std::string& hostname, apr_pool_t* pool); + static void init(const std::string& hostname); // Allow all email transmission to be disabled/enabled. static void enable(bool mail_enabled); diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp index b8c6b1652..7877b855a 100644 --- a/indra/llmessage/llpumpio.cpp +++ b/indra/llmessage/llpumpio.cpp @@ -43,6 +43,7 @@ #include "llmemtype.h" #include "llstl.h" #include "llstat.h" +#include "llthread.h" #include "llfasttimer.h" #include //VS2010 @@ -170,14 +171,12 @@ struct ll_delete_apr_pollset_fd_client_data /** * LLPumpIO */ -LLPumpIO::LLPumpIO(apr_pool_t* pool) : +LLPumpIO::LLPumpIO(void) : mState(LLPumpIO::NORMAL), mRebuildPollset(false), mPollset(NULL), mPollsetClientID(0), mNextLock(0), - mPool(NULL), - mCurrentPool(NULL), mCurrentPoolReallocCount(0), mChainsMutex(NULL), mCallbackMutex(NULL), @@ -186,21 +185,24 @@ LLPumpIO::LLPumpIO(apr_pool_t* pool) : mCurrentChain = mRunningChains.end(); LLMemType m1(LLMemType::MTYPE_IO_PUMP); - initialize(pool); + initialize(); } LLPumpIO::~LLPumpIO() { LLMemType m1(LLMemType::MTYPE_IO_PUMP); - cleanup(); -} - -bool LLPumpIO::prime(apr_pool_t* pool) -{ - LLMemType m1(LLMemType::MTYPE_IO_PUMP); - cleanup(); - initialize(pool); - return ((pool == NULL) ? false : true); +#if LL_THREADS_APR + if (mChainsMutex) apr_thread_mutex_destroy(mChainsMutex); + if (mCallbackMutex) apr_thread_mutex_destroy(mCallbackMutex); +#endif + mChainsMutex = NULL; + mCallbackMutex = NULL; + if(mPollset) + { +// lldebugs << "cleaning up pollset" << llendl; + apr_pollset_destroy(mPollset); + mPollset = NULL; + } } bool LLPumpIO::addChain(const chain_t& chain, F32 timeout) @@ -360,8 +362,7 @@ bool LLPumpIO::setConditional(LLIOPipe* pipe, const apr_pollfd_t* poll) { // each fd needs a pool to work with, so if one was // not specified, use this pool. - // *FIX: Should it always be this pool? - value.second.p = mPool; + value.second.p = (*mCurrentChain).mDescriptorsPool->operator()(); } value.second.client_data = new S32(++mPollsetClientID); (*mCurrentChain).mDescriptors.push_back(value); @@ -828,39 +829,15 @@ void LLPumpIO::control(LLPumpIO::EControl op) } } -void LLPumpIO::initialize(apr_pool_t* pool) +void LLPumpIO::initialize(void) { LLMemType m1(LLMemType::MTYPE_IO_PUMP); - if(!pool) return; + mPool.create(); #if LL_THREADS_APR // SJB: Windows defaults to NESTED and OSX defaults to UNNESTED, so use UNNESTED explicitly. - apr_thread_mutex_create(&mChainsMutex, APR_THREAD_MUTEX_UNNESTED, pool); - apr_thread_mutex_create(&mCallbackMutex, APR_THREAD_MUTEX_UNNESTED, pool); + apr_thread_mutex_create(&mChainsMutex, APR_THREAD_MUTEX_UNNESTED, mPool()); + apr_thread_mutex_create(&mCallbackMutex, APR_THREAD_MUTEX_UNNESTED, mPool()); #endif - mPool = pool; -} - -void LLPumpIO::cleanup() -{ - LLMemType m1(LLMemType::MTYPE_IO_PUMP); -#if LL_THREADS_APR - if(mChainsMutex) apr_thread_mutex_destroy(mChainsMutex); - if(mCallbackMutex) apr_thread_mutex_destroy(mCallbackMutex); -#endif - mChainsMutex = NULL; - mCallbackMutex = NULL; - if(mPollset) - { -// lldebugs << "cleaning up pollset" << llendl; - apr_pollset_destroy(mPollset); - mPollset = NULL; - } - if(mCurrentPool) - { - apr_pool_destroy(mCurrentPool); - mCurrentPool = NULL; - } - mPool = NULL; } void LLPumpIO::rebuildPollset() @@ -888,21 +865,19 @@ void LLPumpIO::rebuildPollset() if(mCurrentPool && (0 == (++mCurrentPoolReallocCount % POLLSET_POOL_RECYCLE_COUNT))) { - apr_pool_destroy(mCurrentPool); - mCurrentPool = NULL; + mCurrentPool.destroy(); mCurrentPoolReallocCount = 0; } if(!mCurrentPool) { - apr_status_t status = apr_pool_create(&mCurrentPool, mPool); - (void)ll_apr_warn_status(status); + mCurrentPool.create(mPool); } // add all of the file descriptors run_it = mRunningChains.begin(); LLChainInfo::conditionals_t::iterator fd_it; LLChainInfo::conditionals_t::iterator fd_end; - apr_pollset_create(&mPollset, size, mCurrentPool, 0); + apr_pollset_create(&mPollset, size, mCurrentPool(), 0); for(; run_it != run_end; ++run_it) { fd_it = (*run_it).mDescriptors.begin(); @@ -1160,7 +1135,8 @@ bool LLPumpIO::handleChainError( LLPumpIO::LLChainInfo::LLChainInfo() : mInit(false), mLock(0), - mEOS(false) + mEOS(false), + mDescriptorsPool(new AIAPRPool(LLThread::tldata().mRootPool)) { LLMemType m1(LLMemType::MTYPE_IO_PUMP); mTimer.setTimerExpirySec(DEFAULT_CHAIN_EXPIRY_SECS); diff --git a/indra/llmessage/llpumpio.h b/indra/llmessage/llpumpio.h index fc0bfabaa..2666be04a 100644 --- a/indra/llmessage/llpumpio.h +++ b/indra/llmessage/llpumpio.h @@ -36,11 +36,12 @@ #define LL_LLPUMPIO_H #include +#include #if LL_LINUX // needed for PATH_MAX in APR. #include #endif -#include "apr_pools.h" +#include "aiaprpool.h" #include "llbuffer.h" #include "llframetimer.h" #include "lliopipe.h" @@ -64,9 +65,8 @@ extern const F32 NEVER_CHAIN_EXPIRY_SECS; * pump() on a thread used for IO and call * respond() on a thread that is expected to do higher * level processing. You can call almost any other method from any - * thread - see notes for each method for details. In order for the - * threading abstraction to work, you need to call prime() - * with a valid apr pool. + * thread - see notes for each method for details. + * * A pump instance manages much of the state for the pipe, including * the list of pipes in the chain, the channel for each element in the * chain, the buffer, and if any pipe has marked the stream or process @@ -85,24 +85,13 @@ public: /** * @brief Constructor. */ - LLPumpIO(apr_pool_t* pool); + LLPumpIO(void); /** * @brief Destructor. */ ~LLPumpIO(); - /** - * @brief Prepare this pump for usage. - * - * If you fail to call this method prior to use, the pump will - * try to work, but will not come with any thread locking - * mechanisms. - * @param pool The apr pool to use. - * @return Returns true if the pump is primed. - */ - bool prime(apr_pool_t* pool); - /** * @brief Typedef for having a chain of pipes. */ @@ -374,6 +363,7 @@ protected: typedef std::pair pipe_conditional_t; typedef std::vector conditionals_t; conditionals_t mDescriptors; + boost::shared_ptr mDescriptorsPool; }; // All the running chains & info @@ -392,9 +382,9 @@ protected: callbacks_t mPendingCallbacks; callbacks_t mCallbacks; - // memory allocator for pollsets & mutexes. - apr_pool_t* mPool; - apr_pool_t* mCurrentPool; + // Memory pool for pollsets & mutexes. + AIAPRPool mPool; + AIAPRPool mCurrentPool; S32 mCurrentPoolReallocCount; #if LL_THREADS_APR @@ -406,8 +396,7 @@ protected: #endif protected: - void initialize(apr_pool_t* pool); - void cleanup(); + void initialize(); /** * @brief Given the internal state of the chains, rebuild the pollset diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp index 46e976fe3..87f011643 100644 --- a/indra/llmessage/llurlrequest.cpp +++ b/indra/llmessage/llurlrequest.cpp @@ -45,6 +45,7 @@ #include "llstring.h" #include "apr_env.h" #include "llapr.h" +#include "llscopedvolatileaprpool.h" static const U32 HTTP_STATUS_PIPE_ERROR = 499; /** @@ -161,27 +162,31 @@ void LLURLRequest::setCallback(LLURLRequestComplete* callback) // is called with use_proxy = FALSE void LLURLRequest::useProxy(bool use_proxy) { - static char *env_proxy; + static std::string env_proxy; - if (use_proxy && (env_proxy == NULL)) + if (use_proxy && env_proxy.empty()) { - apr_status_t status; - LLAPRPool pool; - status = apr_env_get(&env_proxy, "ALL_PROXY", pool.getAPRPool()); + char* env_proxy_str; + LLScopedVolatileAPRPool scoped_pool; + apr_status_t status = apr_env_get(&env_proxy_str, "ALL_PROXY", scoped_pool); if (status != APR_SUCCESS) { - status = apr_env_get(&env_proxy, "http_proxy", pool.getAPRPool()); + status = apr_env_get(&env_proxy_str, "http_proxy", scoped_pool); } if (status != APR_SUCCESS) { - use_proxy = FALSE; + use_proxy = false; } + else + { + // env_proxy_str is stored in the scoped_pool, so we have to make a copy. + env_proxy = env_proxy_str; + } } + lldebugs << "use_proxy = " << (use_proxy?'Y':'N') << ", env_proxy = \"" << env_proxy << "\"" << llendl; - lldebugs << "use_proxy = " << (use_proxy?'Y':'N') << ", env_proxy = " << (env_proxy ? env_proxy : "(null)") << llendl; - - if (env_proxy && use_proxy) + if (use_proxy) { mDetail->mCurlRequest->setoptString(CURLOPT_PROXY, env_proxy); } diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp index 677052d65..d0572fb4a 100644 --- a/indra/llmessage/message.cpp +++ b/indra/llmessage/message.cpp @@ -107,8 +107,10 @@ std::string get_shared_secret(); class LLMessagePollInfo { public: + LLMessagePollInfo(void) : mPool(LLThread::tldata().mRootPool) { } apr_socket_t *mAPRSocketp; apr_pollfd_t mPollFD; + AIAPRPool mPool; }; namespace @@ -297,20 +299,13 @@ LLMessageSystem::LLMessageSystem(const std::string& filename, U32 port, } // LL_DEBUGS("Messaging") << << "*** port: " << mPort << llendl; - // - // Create the data structure that we can poll on - // - if (!gAPRPoolp) - { - LL_ERRS("Messaging") << "No APR pool before message system initialization!" << llendl; - ll_init_apr(); - } - apr_socket_t *aprSocketp = NULL; - apr_os_sock_put(&aprSocketp, (apr_os_sock_t*)&mSocket, gAPRPoolp); - mPollInfop = new LLMessagePollInfo; + + apr_socket_t *aprSocketp = NULL; + apr_os_sock_put(&aprSocketp, (apr_os_sock_t*)&mSocket, mPollInfop->mPool()); + mPollInfop->mAPRSocketp = aprSocketp; - mPollInfop->mPollFD.p = gAPRPoolp; + mPollInfop->mPollFD.p = mPollInfop->mPool(); mPollInfop->mPollFD.desc_type = APR_POLL_SOCKET; mPollInfop->mPollFD.reqevents = APR_POLLIN; mPollInfop->mPollFD.rtnevents = 0; diff --git a/indra/llplugin/llplugininstance.cpp b/indra/llplugin/llplugininstance.cpp index b822b9e94..3a1395cd2 100644 --- a/indra/llplugin/llplugininstance.cpp +++ b/indra/llplugin/llplugininstance.cpp @@ -36,8 +36,7 @@ #include "linden_common.h" #include "llplugininstance.h" - -#include "llapr.h" +#include "aiaprpool.h" /** Virtual destructor. */ LLPluginInstanceMessageListener::~LLPluginInstanceMessageListener() @@ -86,7 +85,7 @@ int LLPluginInstance::load(std::string &plugin_file) int result = apr_dso_load(&mDSOHandle, plugin_file.c_str(), - gAPRPoolp); + AIAPRRootPool::get()()); if(result != APR_SUCCESS) { char buf[1024]; diff --git a/indra/llplugin/llpluginmessagepipe.cpp b/indra/llplugin/llpluginmessagepipe.cpp index 8168b32c4..ebac3c52b 100644 --- a/indra/llplugin/llpluginmessagepipe.cpp +++ b/indra/llplugin/llpluginmessagepipe.cpp @@ -99,8 +99,6 @@ void LLPluginMessagePipeOwner::killMessagePipe(void) } LLPluginMessagePipe::LLPluginMessagePipe(LLPluginMessagePipeOwner *owner, LLSocket::ptr_t socket): - mInputMutex(gAPRPoolp), - mOutputMutex(gAPRPoolp), mOwner(owner), mSocket(socket) { diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp index 8dbf2b3e9..d2238236f 100644 --- a/indra/llplugin/llpluginprocesschild.cpp +++ b/indra/llplugin/llpluginprocesschild.cpp @@ -47,7 +47,7 @@ LLPluginProcessChild::LLPluginProcessChild() { mState = STATE_UNINITIALIZED; mInstance = NULL; - mSocket = LLSocket::create(gAPRPoolp, LLSocket::STREAM_TCP); + mSocket = LLSocket::create(LLSocket::STREAM_TCP); mSleepTime = PLUGIN_IDLE_SECONDS; // default: send idle messages at 100Hz mCPUElapsed = 0.0f; mBlockingRequest = false; diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp index 8fd18ef05..2cb6b2832 100644 --- a/indra/llplugin/llpluginprocessparent.cpp +++ b/indra/llplugin/llpluginprocessparent.cpp @@ -49,6 +49,7 @@ LLPluginProcessParentOwner::~LLPluginProcessParentOwner() bool LLPluginProcessParent::sUseReadThread = false; apr_pollset_t *LLPluginProcessParent::sPollSet = NULL; +AIAPRPool LLPluginProcessParent::sPollSetPool; bool LLPluginProcessParent::sPollsetNeedsRebuild = false; LLMutex *LLPluginProcessParent::sInstancesMutex; std::list LLPluginProcessParent::sInstances; @@ -59,7 +60,7 @@ class LLPluginProcessParentPollThread: public LLThread { public: LLPluginProcessParentPollThread() : - LLThread("LLPluginProcessParentPollThread", gAPRPoolp) + LLThread("LLPluginProcessParentPollThread") { } protected: @@ -84,12 +85,11 @@ protected: }; -LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner): - mIncomingQueueMutex(gAPRPoolp) +LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner) { if(!sInstancesMutex) { - sInstancesMutex = new LLMutex(gAPRPoolp); + sInstancesMutex = new LLMutex; } mOwner = owner; @@ -102,6 +102,7 @@ LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner): mBlocked = false; mPolledInput = false; mPollFD.client_data = NULL; + mPollFDPool.create(); mPluginLaunchTimeout = 60.0f; mPluginLockupTimeout = 15.0f; @@ -177,44 +178,28 @@ void LLPluginProcessParent::init(const std::string &launcher_filename, const std bool LLPluginProcessParent::accept() { bool result = false; - apr_status_t status = APR_EGENERAL; - apr_socket_t *new_socket = NULL; - - status = apr_socket_accept( - &new_socket, - mListenSocket->getSocket(), - gAPRPoolp); + mSocket = LLSocket::create(status, mListenSocket); if(status == APR_SUCCESS) { // llinfos << "SUCCESS" << llendl; // Success. Create a message pipe on the new socket - - // we MUST create a new pool for the LLSocket, since it will take ownership of it and delete it in its destructor! - apr_pool_t* new_pool = NULL; - status = apr_pool_create(&new_pool, gAPRPoolp); - - mSocket = LLSocket::create(new_socket, new_pool); new LLPluginMessagePipe(this, mSocket); result = true; } - else if(APR_STATUS_IS_EAGAIN(status)) - { -// llinfos << "EAGAIN" << llendl; - - // No incoming connections. This is not an error. - status = APR_SUCCESS; - } else { -// llinfos << "Error:" << llendl; - ll_apr_warn_status(status); - - // Some other error. - errorState(); + mSocket.reset(); + // EAGAIN means "No incoming connections". This is not an error. + if (!APR_STATUS_IS_EAGAIN(status)) + { + // Some other error. + ll_apr_warn_status(status); + errorState(); + } } return result; @@ -283,7 +268,7 @@ void LLPluginProcessParent::idle(void) apr_status_t status = APR_SUCCESS; apr_sockaddr_t* addr = NULL; - mListenSocket = LLSocket::create(gAPRPoolp, LLSocket::STREAM_TCP); + mListenSocket = LLSocket::create(LLSocket::STREAM_TCP); mBoundPort = 0; // This code is based on parts of LLSocket::create() in lliosocket.cpp. @@ -294,7 +279,7 @@ void LLPluginProcessParent::idle(void) APR_INET, 0, // port 0 = ephemeral ("find me a port") 0, - gAPRPoolp); + AIAPRRootPool::get()()); if(ll_apr_warn_status(status)) { @@ -617,7 +602,8 @@ void LLPluginProcessParent::setMessagePipe(LLPluginMessagePipe *message_pipe) if(message_pipe != NULL) { // Set up the apr_pollfd_t - mPollFD.p = gAPRPoolp; + + mPollFD.p = mPollFDPool(); mPollFD.desc_type = APR_POLL_SOCKET; mPollFD.reqevents = APR_POLLIN|APR_POLLERR|APR_POLLHUP; mPollFD.rtnevents = 0; @@ -664,6 +650,7 @@ void LLPluginProcessParent::updatePollset() // delete the existing pollset. apr_pollset_destroy(sPollSet); sPollSet = NULL; + sPollSetPool.destroy(); } std::list::iterator iter; @@ -686,12 +673,14 @@ void LLPluginProcessParent::updatePollset() { #ifdef APR_POLLSET_NOCOPY // The pollset doesn't exist yet. Create it now. - apr_status_t status = apr_pollset_create(&sPollSet, count, gAPRPoolp, APR_POLLSET_NOCOPY); + sPollSetPool.create(); + apr_status_t status = apr_pollset_create(&sPollSet, count, sPollSetPool(), APR_POLLSET_NOCOPY); if(status != APR_SUCCESS) { #endif // APR_POLLSET_NOCOPY LL_WARNS("PluginPoll") << "Couldn't create pollset. Falling back to non-pollset mode." << LL_ENDL; sPollSet = NULL; + sPollSetPool.destroy(); #ifdef APR_POLLSET_NOCOPY } else diff --git a/indra/llplugin/llpluginprocessparent.h b/indra/llplugin/llpluginprocessparent.h index 95f5f70c5..bba3643d6 100644 --- a/indra/llplugin/llpluginprocessparent.h +++ b/indra/llplugin/llpluginprocessparent.h @@ -186,7 +186,9 @@ private: static bool sUseReadThread; apr_pollfd_t mPollFD; + AIAPRPool mPollFDPool; static apr_pollset_t *sPollSet; + static AIAPRPool sPollSetPool; static bool sPollsetNeedsRebuild; static LLMutex *sInstancesMutex; static std::list sInstances; diff --git a/indra/llplugin/llpluginsharedmemory.cpp b/indra/llplugin/llpluginsharedmemory.cpp index e8a411a53..883d7b634 100644 --- a/indra/llplugin/llpluginsharedmemory.cpp +++ b/indra/llplugin/llpluginsharedmemory.cpp @@ -201,7 +201,8 @@ bool LLPluginSharedMemory::create(size_t size) mName += createName(); mSize = size; - apr_status_t status = apr_shm_create( &(mImpl->mAprSharedMemory), mSize, mName.c_str(), gAPRPoolp ); + mPool.create(); + apr_status_t status = apr_shm_create( &(mImpl->mAprSharedMemory), mSize, mName.c_str(), mPool()); if(ll_apr_warn_status(status)) { @@ -224,7 +225,7 @@ bool LLPluginSharedMemory::destroy(void) } mImpl->mAprSharedMemory = NULL; } - + mPool.destroy(); return true; } @@ -233,7 +234,8 @@ bool LLPluginSharedMemory::attach(const std::string &name, size_t size) mName = name; mSize = size; - apr_status_t status = apr_shm_attach( &(mImpl->mAprSharedMemory), mName.c_str(), gAPRPoolp ); + mPool.create(); + apr_status_t status = apr_shm_attach( &(mImpl->mAprSharedMemory), mName.c_str(), mPool() ); if(ll_apr_warn_status(status)) { @@ -255,6 +257,7 @@ bool LLPluginSharedMemory::detach(void) } mImpl->mAprSharedMemory = NULL; } + mPool.destroy(); return true; } diff --git a/indra/llplugin/llpluginsharedmemory.h b/indra/llplugin/llpluginsharedmemory.h index 081d311b3..669a3e409 100644 --- a/indra/llplugin/llpluginsharedmemory.h +++ b/indra/llplugin/llpluginsharedmemory.h @@ -35,6 +35,8 @@ #ifndef LL_LLPLUGINSHAREDMEMORY_H #define LL_LLPLUGINSHAREDMEMORY_H +#include "aiaprpool.h" + class LLPluginSharedMemoryPlatformImpl; /** @@ -115,6 +117,7 @@ private: bool close(void); bool unlink(void); + AIAPRPool mPool; std::string mName; size_t mSize; void *mMappedAddress; diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp index 64c087bec..cca8ead8f 100644 --- a/indra/llplugin/slplugin/slplugin.cpp +++ b/indra/llplugin/slplugin/slplugin.cpp @@ -183,8 +183,6 @@ int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdL int main(int argc, char **argv) #endif { - ll_init_apr(); - // Set up llerror logging { LLError::initForApplication("."); @@ -400,8 +398,6 @@ int main(int argc, char **argv) delete plugin; - ll_cleanup_apr(); - return 0; } diff --git a/indra/llvfs/llvfs.cpp b/indra/llvfs/llvfs.cpp index b90d4b3c8..1f4c991b2 100644 --- a/indra/llvfs/llvfs.cpp +++ b/indra/llvfs/llvfs.cpp @@ -219,7 +219,7 @@ const S32 LLVFSFileBlock::SERIAL_SIZE = 34; LLVFS::LLVFS(const std::string& index_filename, const std::string& data_filename, const BOOL read_only, const U32 presize, const BOOL remove_after_crash) : mRemoveAfterCrash(remove_after_crash) { - mDataMutex = new LLMutex(0); + mDataMutex = new LLMutex; S32 i; for (i = 0; i < VFSLOCK_COUNT; i++) diff --git a/indra/media_plugins/webkit/linux_volume_catcher.cpp b/indra/media_plugins/webkit/linux_volume_catcher.cpp index 085708640..321d1f91f 100644 --- a/indra/media_plugins/webkit/linux_volume_catcher.cpp +++ b/indra/media_plugins/webkit/linux_volume_catcher.cpp @@ -50,7 +50,7 @@ extern "C" { #include #include // There's no special reason why we want the *glib* PA mainloop, but the generic polling implementation seems broken. -#include "apr_pools.h" +#include "aiaprpool.h" #include "apr_dso.h" } @@ -66,7 +66,7 @@ extern "C" { #undef LL_PA_SYM static bool sSymsGrabbed = false; -static apr_pool_t *sSymPADSOMemoryPool = NULL; +static AIAPRPool sSymPADSOMemoryPool; static apr_dso_handle_t *sSymPADSOHandleG = NULL; bool grab_pa_syms(std::string pulse_dso_name) @@ -85,11 +85,11 @@ bool grab_pa_syms(std::string pulse_dso_name) #define LL_PA_SYM(REQUIRED, PASYM, RTN, ...) do{rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll##PASYM, sSymPADSOHandle, #PASYM); if (rv != APR_SUCCESS) {INFOMSG("Failed to grab symbol: %s", #PASYM); if (REQUIRED) sym_error = true;} else DEBUGMSG("grabbed symbol: %s from %p", #PASYM, (void*)ll##PASYM);}while(0) //attempt to load the shared library - apr_pool_create(&sSymPADSOMemoryPool, NULL); + sSymPADSOMemoryPool.create(); if ( APR_SUCCESS == (rv = apr_dso_load(&sSymPADSOHandle, pulse_dso_name.c_str(), - sSymPADSOMemoryPool) )) + sSymPADSOMemoryPool()) )) { INFOMSG("Found DSO: %s", pulse_dso_name.c_str()); @@ -132,11 +132,7 @@ void ungrab_pa_syms() sSymPADSOHandleG = NULL; } - if ( sSymPADSOMemoryPool ) - { - apr_pool_destroy(sSymPADSOMemoryPool); - sSymPADSOMemoryPool = NULL; - } + sSymPADSOMemoryPool.destroy(); // NULL-out all of the symbols we'd grabbed #define LL_PA_SYM(REQUIRED, PASYM, RTN, ...) do{ll##PASYM = NULL;}while(0) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index bd1521ba3..18715632e 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -857,7 +857,7 @@ bool LLAppViewer::mainLoop() //------------------------------------------- // Create IO Pump to use for HTTP Requests. - gServicePump = new LLPumpIO(gAPRPoolp); + gServicePump = new LLPumpIO; LLHTTPClient::setPump(*gServicePump); LLCurl::setCAFile(gDirUtilp->getCAFile()); diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp index bb9d61394..a19ad5658 100644 --- a/indra/newview/llappviewerlinux.cpp +++ b/indra/newview/llappviewerlinux.cpp @@ -139,6 +139,7 @@ int main( int argc, char **argv ) } delete viewer_app_ptr; viewer_app_ptr = NULL; + return 0; } diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp index 67fc17d28..b7bb39a74 100644 --- a/indra/newview/llappviewermacosx.cpp +++ b/indra/newview/llappviewermacosx.cpp @@ -119,6 +119,7 @@ int main( int argc, char **argv ) } delete viewer_app_ptr; viewer_app_ptr = NULL; + return 0; } diff --git a/indra/newview/llconsole.cpp b/indra/newview/llconsole.cpp index 4a0647b8b..937ccec24 100644 --- a/indra/newview/llconsole.cpp +++ b/indra/newview/llconsole.cpp @@ -68,8 +68,7 @@ LLConsole::LLConsole(const std::string& name, const LLRect &rect, mFadeTime(persist_time - FADE_DURATION), mFont(LLFontGL::getFontSansSerif()), mConsoleWidth(0), - mConsoleHeight(0), - mQueueMutex(NULL) + mConsoleHeight(0) { mTimer.reset(); diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 5e08d7608..c37add97a 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -743,9 +743,6 @@ void LLTextureCacheWorker::endWork(S32 param, bool aborted) LLTextureCache::LLTextureCache(bool threaded) : LLWorkerThread("TextureCache", threaded), - mWorkersMutex(NULL), - mHeaderMutex(NULL), - mListMutex(NULL), mHeaderAPRFile(NULL), mReadOnly(TRUE), //do not allow to change the texture cache until setReadOnly() is called. mTexturesSizeTotal(0), diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h index 45ec5e211..3a4b1f25e 100644 --- a/indra/newview/lltexturecache.h +++ b/indra/newview/lltexturecache.h @@ -143,9 +143,6 @@ protected: std::string getTextureFileName(const LLUUID& id); void addCompleted(Responder* responder, bool success); -protected: - //void setFileAPRPool(apr_pool_t* pool) { mFileAPRPool = pool ; } - private: void setDirNames(ELLPath location); void readHeaderCache(); diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 0655b509e..cd74d3d73 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -425,7 +425,7 @@ class SGHostBlackList{ static void lock() { if (!sMutex) - sMutex = new LLMutex(0); + sMutex = new LLMutex; sMutex->lock(); } @@ -767,7 +767,6 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher, mRetryAttempt(0), mActiveCount(0), mGetStatus(0), - mWorkMutex(NULL), mFirstPacket(0), mLastPacket(-1), mTotalPackets(0), @@ -1943,8 +1942,6 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image mDebugPause(FALSE), mPacketCount(0), mBadPacketCount(0), - mQueueMutex(getAPRPool()), - mNetworkQueueMutex(getAPRPool()), mTextureCache(cache), mImageDecodeThread(imagedecodethread), mTextureBandwidth(0), diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h index 2921dd583..85eaabee9 100644 --- a/indra/newview/llviewerprecompiledheaders.h +++ b/indra/newview/llviewerprecompiledheaders.h @@ -164,7 +164,7 @@ #include "llinstantmessage.h" #include "llinvite.h" //#include "llloginflags.h" -#include "llmail.h" +//#include "llmail.h" #include "llmessagethrottle.h" #include "llnamevalue.h" #include "llpacketack.h" diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index eca5594a5..79e8fc535 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -1781,7 +1781,7 @@ void LLVoiceClient::stateMachine() if(!mSocket) { - mSocket = LLSocket::create(gAPRPoolp, LLSocket::STREAM_TCP); + mSocket = LLSocket::create(LLSocket::STREAM_TCP); } mConnected = mSocket->blockingConnect(mDaemonHost); diff --git a/indra/newview/llwatchdog.cpp b/indra/newview/llwatchdog.cpp index 330bc8a39..9af050c4c 100644 --- a/indra/newview/llwatchdog.cpp +++ b/indra/newview/llwatchdog.cpp @@ -184,8 +184,8 @@ void LLWatchdog::init(killer_event_callback func) mKillerCallback = func; if(!mSuspectsAccessMutex && !mTimer) { - mSuspectsAccessMutex = new LLMutex(NULL); - mTimer = new LLWatchdogTimerThread(); + mSuspectsAccessMutex = new LLMutex; + mTimer = new LLWatchdogTimerThread; mTimer->setSleepTime(WATCHDOG_SLEEP_TIME_USEC / 1000); mLastClockCount = LLTimer::getTotalTime(); diff --git a/indra/test/lltemplatemessagebuilder_tut.cpp b/indra/test/lltemplatemessagebuilder_tut.cpp index 5b33d0272..9fecc2f90 100644 --- a/indra/test/lltemplatemessagebuilder_tut.cpp +++ b/indra/test/lltemplatemessagebuilder_tut.cpp @@ -35,7 +35,6 @@ #include "linden_common.h" #include "lltut.h" -#include "llapr.h" #include "llmessagetemplate.h" #include "llquaternion.h" #include "lltemplatemessagebuilder.h" @@ -59,7 +58,6 @@ namespace tut static bool init = false; if(! init) { - ll_init_apr(); const F32 circuit_heartbeat_interval=5; const F32 circuit_timeout=100; diff --git a/indra/test/message_tut.cpp b/indra/test/message_tut.cpp index 3fede2608..694db5213 100644 --- a/indra/test/message_tut.cpp +++ b/indra/test/message_tut.cpp @@ -35,7 +35,6 @@ #include "linden_common.h" #include "lltut.h" -#include "llapr.h" #include "llmessageconfig.h" #include "llsdserialize.h" #include "llversionserver.h" @@ -68,7 +67,6 @@ namespace tut static bool init = false; if(!init) { - ll_init_apr(); //init_prehash_data(); init = true; } diff --git a/indra/test/test.cpp b/indra/test/test.cpp index 8e1376ddc..d8f00c602 100644 --- a/indra/test/test.cpp +++ b/indra/test/test.cpp @@ -43,8 +43,8 @@ #include "linden_common.h" #include "llerrorcontrol.h" #include "lltut.h" +#include "aiaprpool.h" -#include "apr_pools.h" #include "apr_getopt.h" extern void ll_init_apr(); @@ -250,17 +250,12 @@ int main(int argc, char **argv) ctype_workaround(); #endif - ll_init_apr(); - apr_pool_t* pool = NULL; - if(APR_SUCCESS != apr_pool_create(&pool, NULL)) - { - std::cerr << "Unable to initialize pool" << std::endl; - return 1; - } + AIAPRPool pool; + pool.create(); apr_getopt_t* os = NULL; - if(APR_SUCCESS != apr_getopt_init(&os, pool, argc, argv)) + if(APR_SUCCESS != apr_getopt_init(&os, pool(), argc, argv)) { - std::cerr << "Unable to pool" << std::endl; + std::cerr << "Unable to initialize the arguments for parsing by apr_getopt()." << std::endl; return 1; } @@ -362,6 +357,5 @@ int main(int argc, char **argv) s.close(); } - apr_terminate(); return 0; } From 86a19e8e917e72b27c059a0da911539705834ea1 Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Thu, 5 May 2011 02:54:38 +0200 Subject: [PATCH 15/44] IMP-701: An API to wrap objects for thread-safe access. See http://redmine.imprudenceviewer.org/issues/701 --- doc/contributions.txt | 1 + indra/llcommon/CMakeLists.txt | 1 + indra/llcommon/aithreadsafe.h | 482 ++++++++++++++++++++++++++++++++++ indra/llcommon/llthread.h | 96 ++++++- 4 files changed, 579 insertions(+), 1 deletion(-) create mode 100644 indra/llcommon/aithreadsafe.h diff --git a/doc/contributions.txt b/doc/contributions.txt index 849c95de4..b5b84a45d 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -111,6 +111,7 @@ Aleric Inglewood IMP-663 IMP-664 IMP-670 + IMP-701 Alissa Sabre VWR-81 VWR-83 diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index cc6bffe3f..7f352269b 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -80,6 +80,7 @@ set(llcommon_HEADER_FILES CMakeLists.txt aiaprpool.h + aithreadsafe.h bitpack.h ctype_workaround.h doublelinkedlist.h diff --git a/indra/llcommon/aithreadsafe.h b/indra/llcommon/aithreadsafe.h new file mode 100644 index 000000000..70cd2a3db --- /dev/null +++ b/indra/llcommon/aithreadsafe.h @@ -0,0 +1,482 @@ +/** + * @file aithreadsafe.h + * @brief Implementation of AIThreadSafe, AIReadAccessConst, AIReadAccess and AIWriteAccess. + * + * Copyright (c) 2010, Aleric Inglewood. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution. + * + * CHANGELOG + * and additional copyright holders. + * + * 31/03/2010 + * Initial version, written by Aleric Inglewood @ SL + */ + +#ifndef AITHREADSAFE_H +#define AITHREADSAFE_H + +#include + +#include "llthread.h" +#include "llerror.h" + +template struct AIReadAccessConst; +template struct AIReadAccess; +template struct AIWriteAccess; +template struct AIAccess; + +template +class AIThreadSafeBits +{ +private: + // AIThreadSafe is a wrapper around an instance of T. + // Because T might not have a default constructor, it is constructed + // 'in place', with placement new, in the memory reserved here. + // + // Make sure that the memory that T will be placed in is properly + // aligned by using an array of long's. + long mMemory[(sizeof(T) + sizeof(long) - 1) / sizeof(long)]; + +public: + // The wrapped objects are constructed in-place with placement new *outside* + // of this object (by AITHREADSAFE macro(s) or derived classes). + // However, we are responsible for the destruction of the wrapped object. + ~AIThreadSafeBits() { ptr()->~T(); } + + // Only for use by AITHREADSAFE, see below. + void* memory() const { return const_cast(&mMemory[0]); } + +protected: + // Accessors. + T const* ptr() const { return reinterpret_cast(mMemory); } + T* ptr() { return reinterpret_cast(mMemory); } +}; + +/** + * @brief A wrapper class for objects that need to be accessed by more than one thread, allowing concurrent readers. + * + * Use AITHREADSAFE to define instances of any type, and use AIReadAccessConst, + * AIReadAccess and AIWriteAccess to get access to the instance. + * + * For example, + * + * + * class Foo { public: Foo(int, int); }; + * + * AITHREADSAFE(Foo, foo, (2, 3)); + * + * AIReadAccess foo_r(foo); + * // Use foo_r-> for read access. + * + * AIWriteAccess foo_w(foo); + * // Use foo_w-> for write access. + * + * + * If foo is constant, you have to use AIReadAccessConst. + * + * It is possible to pass access objects to a function that + * downgrades the access, for example: + * + * + * void readfunc(AIReadAccess const& access); + * + * AIWriteAccess foo_w(foo); + * readfunc(foo_w); // readfunc will perform read access to foo_w. + * + * + * If AIReadAccess is non-const, you can upgrade the access by creating + * an AIWriteAccess object from it. For example: + * + * + * AIWriteAccess foo_w(foo_r); + * + * + * This API is Robust(tm). If you try anything that could result in problems, + * it simply won't compile. The only mistake you can still easily make is + * to obtain write access to an object when it is not needed, or to unlock + * an object in between accesses while the state of the object should be + * preserved. For example: + * + * + * // This resets foo to point to the first file and then returns that. + * std::string filename = AIWriteAccess(foo)->get_first_filename(); + * + * // WRONG! The state between calling get_first_filename and get_next_filename should be preserved! + * + * AIWriteAccess foo_w(foo); // Wrong. The code below only needs read-access. + * while (!filename.empty()) + * { + * something(filename); + * filename = foo_w->next_filename(); + * } + * + * + * Correct would be + * + * + * AIReadAccess foo_r(foo); + * std::string filename = AIWriteAccess(foo_r)->get_first_filename(); + * while (!filename.empty()) + * { + * something(filename); + * filename = foo_r->next_filename(); + * } + * + * + */ +template +class AIThreadSafe : public AIThreadSafeBits +{ +protected: + // Only these may access the object (through ptr()). + friend struct AIReadAccessConst; + friend struct AIReadAccess; + friend struct AIWriteAccess; + + // Locking control. + AIRWLock mRWLock; + + // For use by AIThreadSafeDC + AIThreadSafe(void) { } + AIThreadSafe(AIAPRPool& parent) : mRWLock(parent) { } + +public: + // Only for use by AITHREADSAFE, see below. + AIThreadSafe(T* object) { llassert(object == AIThreadSafeBits::ptr()); } +}; + +/** + * @brief Instantiate an static, global or local object of a given type wrapped in AIThreadSafe, using an arbitrary constructor. + * + * For example, instead of doing + * + * + * Foo foo(x, y); + * static Bar bar; + * + * + * One can instantiate a thread-safe instance with + * + * + * AITHREADSAFE(Foo, foo, (x, y)); + * static AITHREADSAFE(Bar, bar, ); + * + * + * Note: This macro does not allow to allocate such object on the heap. + * If that is needed, have a look at AIThreadSafeDC. + */ +#define AITHREADSAFE(type, var, paramlist) AIThreadSafe var(new (var.memory()) type paramlist) + +/** + * @brief A wrapper class for objects that need to be accessed by more than one thread. + * + * This class is the same as an AIThreadSafe wrapper, except that it can only + * be used for default constructed objects. + * + * For example, instead of + * + * + * Foo foo; + * + * + * One would use + * + * + * AIThreadSafeDC foo; + * + * + * The advantage over AITHREADSAFE is that this object can be allocated with + * new on the heap. For example: + * + * + * AIThreadSafeDC* ptr = new AIThreadSafeDC; + * + * + * which is not possible with AITHREADSAFE. + */ +template +class AIThreadSafeDC : public AIThreadSafe +{ +public: + // Construct a wrapper around a default constructed object. + AIThreadSafeDC(void) { new (AIThreadSafe::ptr()) T; } +}; + +/** + * @brief Read lock object and provide read access. + */ +template +struct AIReadAccessConst +{ + //! Internal enum for the lock-type of the AI*Access object. + enum state_type + { + readlocked, //!< A AIReadAccessConst or AIReadAccess. + read2writelocked, //!< A AIWriteAccess constructed from a AIReadAccess. + writelocked, //!< A AIWriteAccess constructed from a AIThreadSafe. + write2writelocked //!< A AIWriteAccess constructed from (the AIReadAccess base class of) a AIWriteAccess. + }; + + //! Construct a AIReadAccessConst from a constant AIThreadSafe. + AIReadAccessConst(AIThreadSafe const& wrapper) + : mWrapper(const_cast&>(wrapper)), + mState(readlocked) + { + mWrapper.mRWLock.rdlock(); + } + + //! Destruct the AI*Access object. + // These should never be dynamically allocated, so there is no need to make this virtual. + ~AIReadAccessConst() + { + if (mState == readlocked) + mWrapper.mRWLock.rdunlock(); + else if (mState == writelocked) + mWrapper.mRWLock.wrunlock(); + else if (mState == read2writelocked) + mWrapper.mRWLock.wr2rdlock(); + } + + //! Access the underlaying object for read access. + T const* operator->() const { return mWrapper.ptr(); } + + //! Access the underlaying object for read access. + T const& operator*() const { return *mWrapper.ptr(); } + +protected: + //! Constructor used by AIReadAccess. + AIReadAccessConst(AIThreadSafe& wrapper, state_type state) + : mWrapper(wrapper), mState(state) { } + + AIThreadSafe& mWrapper; //!< Reference to the object that we provide access to. + state_type const mState; //!< The lock state that mWrapper is in. + +private: + // Disallow copy constructing directly. + AIReadAccessConst(AIReadAccessConst const&); +}; + +/** + * @brief Read lock object and provide read access, with possible promotion to write access. + */ +template +struct AIReadAccess : public AIReadAccessConst +{ + typedef typename AIReadAccessConst::state_type state_type; + using AIReadAccessConst::readlocked; + + //! Construct a AIReadAccess from a non-constant AIThreadSafe. + AIReadAccess(AIThreadSafe& wrapper) : AIReadAccessConst(wrapper, readlocked) { this->mWrapper.mRWLock.rdlock(); } + +protected: + //! Constructor used by AIWriteAccess. + AIReadAccess(AIThreadSafe& wrapper, state_type state) : AIReadAccessConst(wrapper, state) { } + + friend class AIWriteAccess; +}; + +/** + * @brief Write lock object and provide read/write access. + */ +template +struct AIWriteAccess : public AIReadAccess +{ + using AIReadAccessConst::readlocked; + using AIReadAccessConst::read2writelocked; + using AIReadAccessConst::writelocked; + using AIReadAccessConst::write2writelocked; + + //! Construct a AIWriteAccess from a non-constant AIThreadSafe. + AIWriteAccess(AIThreadSafe& wrapper) : AIReadAccess(wrapper, writelocked) { this->mWrapper.mRWLock.wrlock();} + + //! Promote read access to write access. + explicit AIWriteAccess(AIReadAccess& access) + : AIReadAccess(access.mWrapper, (access.mState == readlocked) ? read2writelocked : write2writelocked) + { + if (this->mState == read2writelocked) + { + this->mWrapper.mRWLock.rd2wrlock(); + } + } + + //! Access the underlaying object for (read and) write access. + T* operator->() const { return this->mWrapper.ptr(); } + + //! Access the underlaying object for (read and) write access. + T& operator*() const { return *this->mWrapper.ptr(); } +}; + +/** + * @brief A wrapper class for objects that need to be accessed by more than one thread. + * + * Use AITHREADSAFESIMPLE to define instances of any type, and use AIAccess + * to get access to the instance. + * + * For example, + * + * + * class Foo { public: Foo(int, int); }; + * + * AITHREADSAFESIMPLE(Foo, foo, (2, 3)); + * + * AIAccess foo_w(foo); + * // Use foo_w-> for read and write access. + * + * See also AIThreadSafe + */ +template +class AIThreadSafeSimple : public AIThreadSafeBits +{ +protected: + // Only this one may access the object (through ptr()). + friend struct AIAccess; + + // Locking control. + LLMutex mMutex; + + // For use by AIThreadSafeSimpleDC + AIThreadSafeSimple(void) { } + AIThreadSafeSimple(AIAPRPool& parent) : mMutex(parent) { } + +public: + // Only for use by AITHREADSAFESIMPLE, see below. + AIThreadSafeSimple(T* object) { llassert(object == AIThreadSafeBits::ptr()); } +}; + +/** + * @brief Instantiate an static, global or local object of a given type wrapped in AIThreadSafeSimple, using an arbitrary constructor. + * + * For example, instead of doing + * + * + * Foo foo(x, y); + * static Bar bar; + * + * + * One can instantiate a thread-safe instance with + * + * + * AITHREADSAFESIMPLE(Foo, foo, (x, y)); + * static AITHREADSAFESIMPLE(Bar, bar, ); + * + * + * Note: This macro does not allow to allocate such object on the heap. + * If that is needed, have a look at AIThreadSafeSimpleDC. + */ +#define AITHREADSAFESIMPLE(type, var, paramlist) AIThreadSafeSimple var(new (var.memory()) type paramlist) + +/** + * @brief A wrapper class for objects that need to be accessed by more than one thread. + * + * This class is the same as an AIThreadSafeSimple wrapper, except that it can only + * be used for default constructed objects. + * + * For example, instead of + * + * + * Foo foo; + * + * + * One would use + * + * + * AIThreadSafeSimpleDC foo; + * + * + * The advantage over AITHREADSAFESIMPLE is that this object can be allocated with + * new on the heap. For example: + * + * + * AIThreadSafeSimpleDC* ptr = new AIThreadSafeSimpleDC; + * + * + * which is not possible with AITHREADSAFESIMPLE. + */ +template +class AIThreadSafeSimpleDC : public AIThreadSafeSimple +{ +public: + // Construct a wrapper around a default constructed object. + AIThreadSafeSimpleDC(void) { new (AIThreadSafeSimple::ptr()) T; } + +protected: + // For use by AIThreadSafeSimpleDCRootPool + AIThreadSafeSimpleDC(AIAPRPool& parent) : AIThreadSafeSimple(parent) { new (AIThreadSafeSimple::ptr()) T; } +}; + +// Helper class for AIThreadSafeSimpleDCRootPool to assure initialization of +// the root pool before constructing AIThreadSafeSimpleDC. +class AIThreadSafeSimpleDCRootPool_pbase +{ +protected: + AIAPRRootPool mRootPool; + +private: + template friend class AIThreadSafeSimpleDCRootPool; + AIThreadSafeSimpleDCRootPool_pbase(void) { } +}; + +/** + * @brief A wrapper class for objects that need to be accessed by more than one thread. + * + * The same as AIThreadSafeSimpleDC except that this class creates its own AIAPRRootPool + * for the internally used mutexes and condition, instead of using the current threads + * root pool. The advantage of this is that it can be used for objects that need to + * be accessed from the destructors of global objects (after main). The disadvantage + * is that it's less efficient to use your own root pool, therefore it's use should be + * restricted to those cases where it is absolutely necessary. + */ +template +class AIThreadSafeSimpleDCRootPool : private AIThreadSafeSimpleDCRootPool_pbase, public AIThreadSafeSimpleDC +{ +public: + // Construct a wrapper around a default constructed object, using memory allocated + // from the operating system for the internal APR objects (mutexes and conditional), + // as opposed to allocated from the current threads root pool. + AIThreadSafeSimpleDCRootPool(void) : + AIThreadSafeSimpleDCRootPool_pbase(), + AIThreadSafeSimpleDC(mRootPool) { } +}; + +/** + * @brief Write lock object and provide read/write access. + */ +template +struct AIAccess +{ + //! Construct a AIAccess from a non-constant AIThreadSafeSimple. + AIAccess(AIThreadSafeSimple& wrapper) : mWrapper(wrapper) { this->mWrapper.mMutex.lock(); } + + //! Access the underlaying object for (read and) write access. + T* operator->() const { return this->mWrapper.ptr(); } + + //! Access the underlaying object for (read and) write access. + T& operator*() const { return *this->mWrapper.ptr(); } + + ~AIAccess() { this->mWrapper.mMutex.unlock(); } + +protected: + AIThreadSafeSimple& mWrapper; //!< Reference to the object that we provide access to. + +private: + // Disallow copy constructing directly. + AIAccess(AIAccess const&); +}; + +#endif diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h index 8fa1b59ae..2146216aa 100644 --- a/indra/llcommon/llthread.h +++ b/indra/llcommon/llthread.h @@ -239,6 +239,101 @@ private: LLMutexBase* mMutex; }; +class AIRWLock +{ +public: + AIRWLock(AIAPRPool& parent = LLThread::tldata().mRootPool) : + mWriterWaitingMutex(parent), mNoHoldersCondition(parent), mHoldersCount(0), mWriterIsWaiting(false) { } + +private: + LLMutex mWriterWaitingMutex; //!< This mutex is locked while some writer is waiting for access. + LLCondition mNoHoldersCondition; //!< Access control for mHoldersCount. Condition true when there are no more holders. + int mHoldersCount; //!< Number of readers or -1 if a writer locked this object. + // This is volatile because we read it outside the critical area of mWriterWaitingMutex, at [1]. + // That means that other threads can change it while we are already in the (inlined) function rdlock. + // Without volatile, the following assembly would fail: + // register x = mWriterIsWaiting; + // /* some thread changes mWriterIsWaiting */ + // if (x ... + // However, because the function is fuzzy to begin with (we don't mind that this race + // condition exists) it would work fine without volatile. So, basically it's just here + // out of principle ;). -- Aleric + bool volatile mWriterIsWaiting; //!< True when there is a writer waiting for write access. + +public: + void rdlock(bool high_priority = false) + { + // Give a writer a higher priority (kinda fuzzy). + if (mWriterIsWaiting && !high_priority) // [1] If there is a writer interested, + { + mWriterWaitingMutex.lock(); // [2] then give it precedence and wait here. + // If we get here then the writer got it's access; mHoldersCount == -1. + mWriterWaitingMutex.unlock(); + } + mNoHoldersCondition.lock(); // [3] Get exclusive access to mHoldersCount. + while (mHoldersCount == -1) // [4] + { + mNoHoldersCondition.wait(); // [5] Wait till mHoldersCount is (or just was) 0. + } + ++mHoldersCount; // One more reader. + mNoHoldersCondition.unlock(); // Release lock on mHoldersCount. + } + void rdunlock(void) + { + mNoHoldersCondition.lock(); // Get exclusive access to mHoldersCount. + if (--mHoldersCount == 0) // Was this the last reader? + { + mNoHoldersCondition.signal(); // Tell waiting threads, see [5], [6] and [7]. + } + mNoHoldersCondition.unlock(); // Release lock on mHoldersCount. + } + void wrlock(void) + { + mWriterWaitingMutex.lock(); // Block new readers, see [2], + mWriterIsWaiting = true; // from this moment on, see [1]. + mNoHoldersCondition.lock(); // Get exclusive access to mHoldersCount. + while (mHoldersCount != 0) // Other readers or writers have this lock? + { + mNoHoldersCondition.wait(); // [6] Wait till mHoldersCount is (or just was) 0. + } + mWriterIsWaiting = false; // Stop checking the lock for new readers, see [1]. + mWriterWaitingMutex.unlock(); // Release blocked readers, they will still hang at [3]. + mHoldersCount = -1; // We are a writer now (will cause a hang at [5], see [4]). + mNoHoldersCondition.unlock(); // Release lock on mHolders (readers go from [3] to [5]). + } + void wrunlock(void) + { + mNoHoldersCondition.lock(); // Get exclusive access to mHoldersCount. + mHoldersCount = 0; // We have no writer anymore. + mNoHoldersCondition.signal(); // Tell waiting threads, see [5], [6] and [7]. + mNoHoldersCondition.unlock(); // Release lock on mHoldersCount. + } + void rd2wrlock(void) + { + mNoHoldersCondition.lock(); // Get exclusive access to mHoldersCount. Blocks new readers at [3]. + if (--mHoldersCount > 0) // Any other reads left? + { + mWriterWaitingMutex.lock(); // Block new readers, see [2], + mWriterIsWaiting = true; // from this moment on, see [1]. + while (mHoldersCount != 0) // Other readers (still) have this lock? + { + mNoHoldersCondition.wait(); // [7] Wait till mHoldersCount is (or just was) 0. + } + mWriterIsWaiting = false; // Stop checking the lock for new readers, see [1]. + mWriterWaitingMutex.unlock(); // Release blocked readers, they will still hang at [3]. + } + mHoldersCount = -1; // We are a writer now (will cause a hang at [5], see [4]). + mNoHoldersCondition.unlock(); // Release lock on mHolders (readers go from [3] to [5]). + } + void wr2rdlock(void) + { + mNoHoldersCondition.lock(); // Get exclusive access to mHoldersCount. + mHoldersCount = 1; // Turn writer into a reader. + mNoHoldersCondition.signal(); // Tell waiting readers, see [5]. + mNoHoldersCondition.unlock(); // Release lock on mHoldersCount. + } +}; + //============================================================================ void LLThread::lockData() @@ -251,7 +346,6 @@ void LLThread::unlockData() mRunCondition->unlock(); } - //============================================================================ // see llmemory.h for LLPointer<> definition From 92696623e075df567c1c38610a7c66a25d891369 Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Thu, 5 May 2011 15:41:19 +0200 Subject: [PATCH 16/44] Start up crash of LLErrorThread due to corrupt map in CheckLevelMap Wrapped gSettings and the global objects returned by Settings::get() and Globals::get() in AIThreadSafe, forcing thread-safe access. This solves the problem of possible corruption of the various LevelMap's in LLError::Settings due to thread unsafe accesses. --- doc/contributions.txt | 1 + indra/llcommon/llapp.cpp | 1 - indra/llcommon/llapp.h | 7 +- indra/llcommon/llerror.cpp | 324 ++++++++++----------- indra/llcommon/llerrorcontrol.h | 6 +- indra/llxml/llcontrol.cpp | 50 +++- indra/llxml/llcontrol.h | 12 +- indra/llxml/llcontrolgroupreader.h | 2 +- indra/newview/llappviewer.cpp | 41 ++- indra/newview/llappviewer.h | 12 +- indra/newview/llfloatersettingsdebug.cpp | 8 +- indra/newview/llstartup.cpp | 2 +- indra/newview/llviewercontrol.cpp | 4 +- indra/newview/llviewercontrol.h | 4 +- indra/newview/tests/llagentaccess_test.cpp | 2 +- 15 files changed, 261 insertions(+), 215 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index b5b84a45d..258e139bc 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -112,6 +112,7 @@ Aleric Inglewood IMP-664 IMP-670 IMP-701 + IMP-734 Alissa Sabre VWR-81 VWR-83 diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp index d5e75c76f..3bb833a94 100644 --- a/indra/llcommon/llapp.cpp +++ b/indra/llcommon/llapp.cpp @@ -95,7 +95,6 @@ LLAppChildCallback LLApp::sDefaultChildCallback = NULL; LLApp::LLApp() : mThreadErrorp(NULL) { commonCtor(); - startErrorThread(); } void LLApp::commonCtor() diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h index 77cb17c1a..d5cf6ea93 100644 --- a/indra/llcommon/llapp.h +++ b/indra/llcommon/llapp.h @@ -256,9 +256,12 @@ protected: */ void stepFrame(); -private: + /** + * @ brief This method is called once as soon as logging is initialized. + */ void startErrorThread(); - + +private: void setupErrorHandling(); // Do platform-specific error-handling setup (signals, structured exceptions) static void runErrorHandler(); // run shortly after we detect an error, ran in the relatively robust context of the LLErrorThread - preferred. static void runSyncErrorHandler(); // run IMMEDIATELY when we get an error, ran in the context of the faulting thread. diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index 56495e666..4cdfe097d 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -55,6 +55,7 @@ #include "llsdserialize.h" #include "llstl.h" #include "lltimer.h" +#include "aithreadsafe.h" extern apr_thread_mutex_t* gCallStacksLogMutexp; @@ -357,12 +358,15 @@ namespace void addCallSite(LLError::CallSite&); void invalidateCallSites(); - static Globals& get(); + static AIThreadSafeSimple& get(); // return the one instance of the globals private: CallSiteVector callSites; + friend class AIThreadSafeSimpleDC; // Calls constructor. + friend class AIThreadSafeSimple; // Calls destructor. + Globals() : messageStreamInUse(false) { } @@ -386,7 +390,7 @@ namespace callSites.clear(); } - Globals& Globals::get() + AIThreadSafeSimple& Globals::get() { /* This pattern, of returning a reference to a static function variable, is to ensure that this global is constructed before @@ -394,8 +398,8 @@ namespace is. See C++ FAQ Lite, sections 10.12 through 10.14 */ - static Globals* globals = new Globals; - return *globals; + static AIThreadSafeSimpleDCRootPool* ts_globals_ptr = new AIThreadSafeSimpleDCRootPool; + return *ts_globals_ptr; } } @@ -424,13 +428,16 @@ namespace LLError int shouldLogCallCounter; - static Settings& get(); + static AIThreadSafeSimple& get(); static void reset(); - static Settings* saveAndReset(); - static void restore(Settings*); + static AIThreadSafeSimple* saveAndReset(); + static void restore(AIThreadSafeSimple*); private: + friend class AIThreadSafeBits; // Calls destructor. + friend class AIThreadSafeSimpleDC; // Calls constructor. + Settings() : printLocation(false), defaultLevel(LLError::LEVEL_DEBUG), @@ -446,53 +453,42 @@ namespace LLError for_each(recorders.begin(), recorders.end(), DeletePointer()); } - - static Settings*& getPtr(); + + static AIThreadSafeSimple* sSettings; }; + + // Pointer to current AIThreadSafeSimple object if any (NULL otherwise). + AIThreadSafeSimple* Settings::sSettings; - Settings& Settings::get() + AIThreadSafeSimple& Settings::get() { - Settings* p = getPtr(); - if (!p) + if (!sSettings) { reset(); - p = getPtr(); } - return *p; + return *sSettings; } void Settings::reset() { - Globals::get().invalidateCallSites(); - - Settings*& p = getPtr(); - delete p; - p = new Settings(); + AIAccess(Globals::get())->invalidateCallSites(); + delete sSettings; + sSettings = new AIThreadSafeSimpleDC; } - Settings* Settings::saveAndReset() + AIThreadSafeSimple* Settings::saveAndReset() { - Globals::get().invalidateCallSites(); - - Settings*& p = getPtr(); - Settings* originalSettings = p; - p = new Settings(); + AIAccess(Globals::get())->invalidateCallSites(); + AIThreadSafeSimple* originalSettings = sSettings; + sSettings = new AIThreadSafeSimpleDC; return originalSettings; } - void Settings::restore(Settings* originalSettings) + void Settings::restore(AIThreadSafeSimple* originalSettings) { - Globals::get().invalidateCallSites(); - - Settings*& p = getPtr(); - delete p; - p = originalSettings; - } - - Settings*& Settings::getPtr() - { - static Settings* currentSettings = NULL; - return currentSettings; + AIAccess(Globals::get())->invalidateCallSites(); + delete sSettings; + sSettings = originalSettings; } } @@ -596,68 +592,64 @@ namespace LLError commonInit(dir); } + void setPrintLocation(AIAccess const& settings_w, bool print) + { + settings_w->printLocation = print; + } + void setPrintLocation(bool print) { - Settings& s = Settings::get(); - s.printLocation = print; + setPrintLocation(AIAccess(Settings::get()), print); } void setFatalFunction(const FatalFunction& f) { - Settings& s = Settings::get(); - s.crashFunction = f; + AIAccess(Settings::get())->crashFunction = f; } FatalFunction getFatalFunction() { - Settings& s = Settings::get(); - return s.crashFunction; + return AIAccess(Settings::get())->crashFunction; } void setTimeFunction(TimeFunction f) { - Settings& s = Settings::get(); - s.timeFunction = f; + AIAccess(Settings::get())->timeFunction = f; + } + + void setDefaultLevel(AIAccess const& settings_w, ELevel level) + { + AIAccess(Globals::get())->invalidateCallSites(); + settings_w->defaultLevel = level; } void setDefaultLevel(ELevel level) { - Globals& g = Globals::get(); - Settings& s = Settings::get(); - g.invalidateCallSites(); - s.defaultLevel = level; + setDefaultLevel(AIAccess(Settings::get()), level); } void setFunctionLevel(const std::string& function_name, ELevel level) { - Globals& g = Globals::get(); - Settings& s = Settings::get(); - g.invalidateCallSites(); - s.functionLevelMap[function_name] = level; + AIAccess(Globals::get())->invalidateCallSites(); + AIAccess(Settings::get())->functionLevelMap[function_name] = level; } void setClassLevel(const std::string& class_name, ELevel level) { - Globals& g = Globals::get(); - Settings& s = Settings::get(); - g.invalidateCallSites(); - s.classLevelMap[class_name] = level; + AIAccess(Globals::get())->invalidateCallSites(); + AIAccess(Settings::get())->classLevelMap[class_name] = level; } void setFileLevel(const std::string& file_name, ELevel level) { - Globals& g = Globals::get(); - Settings& s = Settings::get(); - g.invalidateCallSites(); - s.fileLevelMap[file_name] = level; + AIAccess(Globals::get())->invalidateCallSites(); + AIAccess(Settings::get())->fileLevelMap[file_name] = level; } void setTagLevel(const std::string& tag_name, ELevel level) { - Globals& g = Globals::get(); - Settings& s = Settings::get(); - g.invalidateCallSites(); - s.tagLevelMap[tag_name] = level; + AIAccess(Globals::get())->invalidateCallSites(); + AIAccess(Settings::get())->tagLevelMap[tag_name] = level; } } @@ -701,18 +693,16 @@ namespace LLError { void configure(const LLSD& config) { - Globals& g = Globals::get(); - Settings& s = Settings::get(); + AIAccess settings_w(Settings::get()); + AIAccess(Globals::get())->invalidateCallSites(); + settings_w->functionLevelMap.clear(); + settings_w->classLevelMap.clear(); + settings_w->fileLevelMap.clear(); + settings_w->tagLevelMap.clear(); + settings_w->uniqueLogMessages.clear(); - g.invalidateCallSites(); - s.functionLevelMap.clear(); - s.classLevelMap.clear(); - s.fileLevelMap.clear(); - s.tagLevelMap.clear(); - s.uniqueLogMessages.clear(); - - setPrintLocation(config["print-location"]); - setDefaultLevel(decodeLevel(config["default-level"])); + setPrintLocation(settings_w, config["print-location"]); + setDefaultLevel(settings_w, decodeLevel(config["default-level"])); LLSD sets = config["settings"]; LLSD::array_const_iterator a, end; @@ -722,10 +712,10 @@ namespace LLError ELevel level = decodeLevel(entry["level"]); - setLevels(s.functionLevelMap, entry["functions"], level); - setLevels(s.classLevelMap, entry["classes"], level); - setLevels(s.fileLevelMap, entry["files"], level); - setLevels(s.tagLevelMap, entry["tags"], level); + setLevels(settings_w->functionLevelMap, entry["functions"], level); + setLevels(settings_w->classLevelMap, entry["classes"], level); + setLevels(settings_w->fileLevelMap, entry["files"], level); + setLevels(settings_w->tagLevelMap, entry["tags"], level); } } } @@ -742,26 +732,34 @@ namespace LLError - void addRecorder(Recorder* recorder) + void addRecorder(AIAccess const& settings_w, Recorder* recorder) { if (recorder == NULL) { return; } - Settings& s = Settings::get(); - s.recorders.push_back(recorder); + settings_w->recorders.push_back(recorder); + } + + void addRecorder(Recorder* recorder) + { + addRecorder(AIAccess(Settings::get()), recorder); + } + + void removeRecorder(AIAccess const& settings_w, Recorder* recorder) + { + if (recorder == NULL) + { + return; + } + settings_w->recorders.erase( + std::remove(settings_w->recorders.begin(), settings_w->recorders.end(), recorder), + settings_w->recorders.end()); } void removeRecorder(Recorder* recorder) { - if (recorder == NULL) - { - return; - } - Settings& s = Settings::get(); - s.recorders.erase( - std::remove(s.recorders.begin(), s.recorders.end(), recorder), - s.recorders.end()); + removeRecorder(AIAccess(Settings::get()), recorder); } } @@ -769,12 +767,12 @@ namespace LLError { void logToFile(const std::string& file_name) { - LLError::Settings& s = LLError::Settings::get(); + AIAccess settings_w(Settings::get()); - removeRecorder(s.fileRecorder); - delete s.fileRecorder; - s.fileRecorder = NULL; - s.fileRecorderFileName.clear(); + removeRecorder(settings_w, settings_w->fileRecorder); + delete settings_w->fileRecorder; + settings_w->fileRecorder = NULL; + settings_w->fileRecorderFileName.clear(); if (file_name.empty()) { @@ -788,54 +786,51 @@ namespace LLError return; } - s.fileRecorderFileName = file_name; - s.fileRecorder = f; - addRecorder(f); + settings_w->fileRecorderFileName = file_name; + settings_w->fileRecorder = f; + addRecorder(settings_w, f); } void logToFixedBuffer(LLLineBuffer* fixedBuffer) { - LLError::Settings& s = LLError::Settings::get(); + AIAccess settings_w(Settings::get()); - removeRecorder(s.fixedBufferRecorder); - delete s.fixedBufferRecorder; - s.fixedBufferRecorder = NULL; + removeRecorder(settings_w, settings_w->fixedBufferRecorder); + delete settings_w->fixedBufferRecorder; + settings_w->fixedBufferRecorder = NULL; if (!fixedBuffer) { return; } - s.fixedBufferRecorder = new RecordToFixedBuffer(fixedBuffer); - addRecorder(s.fixedBufferRecorder); + settings_w->fixedBufferRecorder = new RecordToFixedBuffer(fixedBuffer); + addRecorder(settings_w, settings_w->fixedBufferRecorder); } std::string logFileName() { - LLError::Settings& s = LLError::Settings::get(); - return s.fileRecorderFileName; + return AIAccess(Settings::get())->fileRecorderFileName; } } namespace { - void writeToRecorders(LLError::ELevel level, const std::string& message) + void writeToRecorders(AIAccess const& settings_w, LLError::ELevel level, const std::string& message) { - LLError::Settings& s = LLError::Settings::get(); - std::string messageWithTime; - - for (Recorders::const_iterator i = s.recorders.begin(); - i != s.recorders.end(); + + for (Recorders::const_iterator i = settings_w->recorders.begin(); + i != settings_w->recorders.end(); ++i) { LLError::Recorder* r = *i; - if (r->wantsTime() && s.timeFunction != NULL) + if (r->wantsTime() && settings_w->timeFunction != NULL) { if (messageWithTime.empty()) { - messageWithTime = s.timeFunction() + " " + message; + messageWithTime = settings_w->timeFunction() + " " + message; } r->recordMessage(level, messageWithTime); @@ -955,10 +950,9 @@ namespace LLError return false; } - Globals& g = Globals::get(); - Settings& s = Settings::get(); + AIAccess settings_w(Settings::get()); - s.shouldLogCallCounter += 1; + settings_w->shouldLogCallCounter += 1; std::string class_name = className(site.mClassInfo); std::string function_name = functionName(site.mFunction); @@ -967,20 +961,20 @@ namespace LLError function_name = class_name + "::" + function_name; } - ELevel compareLevel = s.defaultLevel; + ELevel compareLevel = settings_w->defaultLevel; // The most specific match found will be used as the log level, // since the computation short circuits. // So, in increasing order of importance: // Default < Broad Tag < File < Class < Function < Narrow Tag - ((site.mNarrowTag != NULL) ? checkLevelMap(s.tagLevelMap, site.mNarrowTag, compareLevel) : false) - || checkLevelMap(s.functionLevelMap, function_name, compareLevel) - || checkLevelMap(s.classLevelMap, class_name, compareLevel) - || checkLevelMap(s.fileLevelMap, abbreviateFile(site.mFile), compareLevel) - || ((site.mBroadTag != NULL) ? checkLevelMap(s.tagLevelMap, site.mBroadTag, compareLevel) : false); + ((site.mNarrowTag != NULL) ? checkLevelMap(settings_w->tagLevelMap, site.mNarrowTag, compareLevel) : false) + || checkLevelMap(settings_w->functionLevelMap, function_name, compareLevel) + || checkLevelMap(settings_w->classLevelMap, class_name, compareLevel) + || checkLevelMap(settings_w->fileLevelMap, abbreviateFile(site.mFile), compareLevel) + || ((site.mBroadTag != NULL) ? checkLevelMap(settings_w->tagLevelMap, site.mBroadTag, compareLevel) : false); site.mCached = true; - g.addCallSite(site); + AIAccess(Globals::get())->addCallSite(site); return site.mShouldLog = site.mLevel >= compareLevel; } @@ -990,16 +984,16 @@ namespace LLError LogLock lock; if (lock.ok()) { - Globals& g = Globals::get(); + AIAccess globals(Globals::get()); - if (!g.messageStreamInUse) + if (!globals->messageStreamInUse) { - g.messageStreamInUse = true; - return &g.messageStream; + globals->messageStreamInUse = true; + return &globals->messageStream; // Returns pointer to member of unlocked object, apparently "protected" by having set globals->messageStreamInUse. } } - return new std::ostringstream; + return new std::ostringstream; // Holy memory leak. } void Log::flush(std::ostringstream* out, char* message) @@ -1020,12 +1014,12 @@ namespace LLError message[127] = '\0' ; } - Globals& g = Globals::get(); - if (out == &g.messageStream) + AIAccess globals(Globals::get()); + if (out == &globals->messageStream) { - g.messageStream.clear(); - g.messageStream.str(""); - g.messageStreamInUse = false; + globals->messageStream.clear(); + globals->messageStream.str(""); + globals->messageStreamInUse = false; } else { @@ -1042,28 +1036,31 @@ namespace LLError return; } - Globals& g = Globals::get(); - Settings& s = Settings::get(); - std::string message = out->str(); - if (out == &g.messageStream) + { - g.messageStream.clear(); - g.messageStream.str(""); - g.messageStreamInUse = false; - } - else - { - delete out; + AIAccess globals(Globals::get()); + if (out == &globals->messageStream) + { + globals->messageStream.clear(); + globals->messageStream.str(""); + globals->messageStreamInUse = false; + } + else + { + delete out; + } } + AIAccess settings_w(Settings::get()); + if (site.mLevel == LEVEL_ERROR) { std::ostringstream fatalMessage; fatalMessage << abbreviateFile(site.mFile) << "(" << site.mLine << ") : error"; - writeToRecorders(site.mLevel, fatalMessage.str()); + writeToRecorders(settings_w, site.mLevel, fatalMessage.str()); } @@ -1078,7 +1075,7 @@ namespace LLError default: prefix << "XXX: "; break; }; - if (s.printLocation) + if (settings_w->printLocation) { prefix << abbreviateFile(site.mFile) << "(" << site.mLine << ") : "; @@ -1096,8 +1093,8 @@ namespace LLError if (site.mPrintOnce) { - std::map::iterator messageIter = s.uniqueLogMessages.find(message); - if (messageIter != s.uniqueLogMessages.end()) + std::map::iterator messageIter = settings_w->uniqueLogMessages.find(message); + if (messageIter != settings_w->uniqueLogMessages.end()) { messageIter->second++; unsigned int num_messages = messageIter->second; @@ -1113,14 +1110,14 @@ namespace LLError else { prefix << "ONCE: "; - s.uniqueLogMessages[message] = 1; + settings_w->uniqueLogMessages[message] = 1; } } if (site.mPrintOnce) { - std::map::iterator messageIter = s.uniqueLogMessages.find(message); - if (messageIter != s.uniqueLogMessages.end()) + std::map::iterator messageIter = settings_w->uniqueLogMessages.find(message); + if (messageIter != settings_w->uniqueLogMessages.end()) { messageIter->second++; unsigned int num_messages = messageIter->second; @@ -1136,18 +1133,18 @@ namespace LLError else { prefix << "ONCE: "; - s.uniqueLogMessages[message] = 1; + settings_w->uniqueLogMessages[message] = 1; } } prefix << message; message = prefix.str(); - writeToRecorders(site.mLevel, message); + writeToRecorders(settings_w, site.mLevel, message); - if (site.mLevel == LEVEL_ERROR && s.crashFunction) + if (site.mLevel == LEVEL_ERROR && settings_w->crashFunction) { - s.crashFunction(message); + settings_w->crashFunction(message); } } } @@ -1157,14 +1154,16 @@ namespace LLError namespace LLError { - Settings* saveAndResetSettings() + class ThreadSafeSettings { }; + + ThreadSafeSettings* saveAndResetSettings() { - return Settings::saveAndReset(); + return reinterpret_cast(Settings::saveAndReset()); } - void restoreSettings(Settings* s) + void restoreSettings(ThreadSafeSettings* s) { - return Settings::restore(s); + Settings::restore(reinterpret_cast*>(s)); } std::string removePrefix(std::string& s, const std::string& p) @@ -1210,8 +1209,7 @@ namespace LLError int shouldLogCallCount() { - Settings& s = Settings::get(); - return s.shouldLogCallCounter; + return AIAccess(Settings::get())->shouldLogCallCounter; } #if LL_WINDOWS diff --git a/indra/llcommon/llerrorcontrol.h b/indra/llcommon/llerrorcontrol.h index 2a7c500db..c6eb39cae 100644 --- a/indra/llcommon/llerrorcontrol.h +++ b/indra/llcommon/llerrorcontrol.h @@ -167,9 +167,9 @@ namespace LLError Utilities for use by the unit tests of LLError itself. */ - class Settings; - LL_COMMON_API Settings* saveAndResetSettings(); - LL_COMMON_API void restoreSettings(Settings *); + class ThreadSafeSettings; + LL_COMMON_API ThreadSafeSettings* saveAndResetSettings(); + LL_COMMON_API void restoreSettings(ThreadSafeSettings *); LL_COMMON_API std::string abbreviateFile(const std::string& filePath); LL_COMMON_API int shouldLogCallCount(); diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp index f57646b8e..3e6b1d0e4 100644 --- a/indra/llxml/llcontrol.cpp +++ b/indra/llxml/llcontrol.cpp @@ -66,7 +66,20 @@ const S32 CURRENT_VERSION = 101; //So, a global it is! bool gCOAEnabled = false; -LLControlVariable *LLControlVariable::getCOAActive() +LLControlVariable* LLControlVariable::getCOAActive() +{ + //if no coa connection, return 'this' + //if per account is ON and this IS a parent, return child var + //if per account is ON and this IS NOT a parent, return 'this' + //if per account is OFF and this IS NOT a parent, return parent var + //if per account is OFF and this IS a parent, return 'this' + if(getCOAConnection() && gCOAEnabled == isCOAParent()) + return getCOAConnection(); + else + return this; +} + +LLControlVariable const* LLControlVariable::getCOAActive() const { //if no coa connection, return 'this' //if per account is ON and this IS a parent, return child var @@ -282,11 +295,9 @@ LLSD LLControlVariable::getSaveValue() const #if PROF_CTRL_CALLS std::vector> gSettingsCallMap; -#endif //PROF_CTRL_CALLS -LLPointer LLControlGroup::getControl(const std::string& name) + +static update_gSettingsCallMap(ctrl_name_table_t::const_iterator const& iter) { - ctrl_name_table_t::iterator iter = mNameTable.find(name); -#if PROF_CTRL_CALLS if(iter != mNameTable.end()) { std::vector>::iterator iter2 = gSettingsCallMap.begin(); @@ -302,13 +313,32 @@ LLPointer LLControlGroup::getControl(const std::string& name) if(iter2 == gSettingsCallMap.end()) gSettingsCallMap.push_back(std::pair(name.c_str(),1)); } +} +#endif //PROF_CTRL_CALLS + +LLControlVariable* LLControlGroup::getControl(std::string const& name) +{ + ctrl_name_table_t::iterator iter = mNameTable.find(name); +#if PROF_CTRL_CALLS + update_gSettingsCallMap(iter); #endif //PROF_CTRL_CALLS if(iter != mNameTable.end()) return iter->second->getCOAActive(); else - return LLPointer(); + return NULL; } +LLControlVariable const* LLControlGroup::getControl(std::string const& name) const +{ + ctrl_name_table_t::const_iterator iter = mNameTable.find(name); +#if PROF_CTRL_CALLS + update_gSettingsCallMap(iter); +#endif //PROF_CTRL_CALLS + if(iter != mNameTable.end()) + return iter->second->getCOAActive(); + else + return NULL; +} //////////////////////////////////////////////////////////////////////////// @@ -502,9 +532,9 @@ std::string LLControlGroup::findString(const std::string& name) return LLStringUtil::null; } -std::string LLControlGroup::getString(const std::string& name) +std::string LLControlGroup::getString(const std::string& name) const { - LLControlVariable* control = getControl(name); + LLControlVariable const* control = getControl(name); if (control && control->isType(TYPE_STRING)) return control->get().asString(); @@ -649,9 +679,9 @@ LLSD LLControlGroup::getLLSD(const std::string& name) return LLSD(); } -BOOL LLControlGroup::controlExists(const std::string& name) +BOOL LLControlGroup::controlExists(const std::string& name) const { - ctrl_name_table_t::iterator iter = mNameTable.find(name); + ctrl_name_table_t::const_iterator iter = mNameTable.find(name); return iter != mNameTable.end(); } diff --git a/indra/llxml/llcontrol.h b/indra/llxml/llcontrol.h index 38c0be773..e5cbf7354 100644 --- a/indra/llxml/llcontrol.h +++ b/indra/llxml/llcontrol.h @@ -122,7 +122,7 @@ public: const std::string& getComment() const { return mComment; } eControlType type() { return mType; } - bool isType(eControlType tp) { return tp == mType; } + bool isType(eControlType tp) const { return tp == mType; } void resetToDefault(bool fire_signal = false); @@ -153,7 +153,8 @@ public: bool isCOA() const { return mIsCOA; } bool isCOAParent() const { return mIsCOAParent; } LLControlVariable *getCOAConnection() const { return mCOAConnectedVar; } - LLControlVariable *getCOAActive(); + LLControlVariable* getCOAActive(); + LLControlVariable const* getCOAActive() const; void setIsCOA(bool IsCOA) { mIsCOA=IsCOA; } void setCOAConnect(LLControlVariable *pConnect, bool IsParent) { @@ -185,7 +186,8 @@ public: ~LLControlGroup(); void cleanup(); - LLPointer getControl(const std::string& name); + LLControlVariable* getControl(std::string const& name); + LLControlVariable const* getControl(std::string const& name) const; struct ApplyFunctor { @@ -210,7 +212,7 @@ public: std::string findString(const std::string& name); - std::string getString(const std::string& name); + std::string getString(const std::string& name) const; LLWString getWString(const std::string& name); std::string getText(const std::string& name); LLVector3 getVector3(const std::string& name); @@ -245,7 +247,7 @@ public: void setValue(const std::string& name, const LLSD& val); - BOOL controlExists(const std::string& name); + BOOL controlExists(const std::string& name) const; // Returns number of controls loaded, 0 if failed // If require_declaration is false, will auto-declare controls it finds diff --git a/indra/llxml/llcontrolgroupreader.h b/indra/llxml/llcontrolgroupreader.h index c4c04b98b..ef8ee18c9 100644 --- a/indra/llxml/llcontrolgroupreader.h +++ b/indra/llxml/llcontrolgroupreader.h @@ -46,7 +46,7 @@ public: LLControlGroupReader() {} virtual ~LLControlGroupReader() {} - virtual std::string getString(const std::string& name) = 0; + virtual std::string getString(const std::string& name) const = 0; //virtual LLWString getWString(const std::string& name) = 0; virtual std::string getText(const std::string& name) = 0; //virtual LLVector3 getVector3(const std::string& name) = 0; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 18715632e..1e3e80644 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -568,7 +568,10 @@ bool LLAppViewer::init() gDirUtilp->setSkinFolder("default"); initLogging(); - + + // Logging is initialized. Now it's safe to start the error thread. + startErrorThread(); + // gDeleteScheduler = new LLDeleteScheduler(); gBuildNewViewsScheduler = new LLBuildNewViewsScheduler(); @@ -1578,8 +1581,9 @@ bool LLAppViewer::initLogging() return true; } -bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key, - bool set_defaults) +bool LLAppViewer::loadSettingsFromDirectory(AIReadAccess const& settings_r, + std::string const& location_key, + bool set_defaults) { // Find and vet the location key. if(!mSettingsLocationList.has(location_key)) @@ -1606,11 +1610,13 @@ bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key, LLSD files = location.get("Files"); for(LLSD::map_iterator itr = files.beginMap(); itr != files.endMap(); ++itr) { - std::string settings_group = (*itr).first; + std::string const settings_group = (*itr).first; + settings_map_type::const_iterator const settings_group_iter = settings_r->find(settings_group); + llinfos << "Attempting to load settings for the group " << settings_group << " - from location " << location_key << llendl; - if(gSettings.find(settings_group) == gSettings.end()) + if(settings_group_iter == settings_r->end()) { llwarns << "No matching settings group for name " << settings_group << llendl; continue; @@ -1624,11 +1630,10 @@ bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key, std::string custom_name_setting = file.get("NameFromSetting"); // *NOTE: Regardless of the group currently being lodaed, // this setting is always read from the Global settings. - if(gSettings[sGlobalSettingsName]->controlExists(custom_name_setting)) + LLControlGroup const* control_group = settings_r->find(sGlobalSettingsName)->second; + if(control_group->controlExists(custom_name_setting)) { - std::string file_name = - gSettings[sGlobalSettingsName]->getString(custom_name_setting); - full_settings_path = file_name; + full_settings_path = control_group->getString(custom_name_setting); } } @@ -1644,7 +1649,7 @@ bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key, requirement = file.get("Requirement").asInteger(); } - if(!gSettings[settings_group]->loadFromFile(full_settings_path, set_defaults)) + if(!settings_group_iter->second->loadFromFile(full_settings_path, set_defaults)) { if(requirement == 1) { @@ -1686,10 +1691,14 @@ std::string LLAppViewer::getSettingsFilename(const std::string& location_key, bool LLAppViewer::initConfiguration() { + // Grab and hold write locks for the entire duration of this function. + AIWriteAccess settings_w(gSettings); + settings_map_type& settings(*settings_w); + //Set up internal pointers - gSettings[sGlobalSettingsName] = &gSavedSettings; - gSettings[sPerAccountSettingsName] = &gSavedPerAccountSettings; - gSettings[sCrashSettingsName] = &gCrashSettings; + settings[sGlobalSettingsName] = &gSavedSettings; + settings[sPerAccountSettingsName] = &gSavedPerAccountSettings; + settings[sCrashSettingsName] = &gCrashSettings; //Load settings files list std::string settings_file_list = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "settings_files.xml"); @@ -1714,7 +1723,7 @@ bool LLAppViewer::initConfiguration() // - load defaults bool set_defaults = true; - if(!loadSettingsFromDirectory("Default", set_defaults)) + if(!loadSettingsFromDirectory(settings_w, "Default", set_defaults)) { std::ostringstream msg; msg << "Second Life could not load its default settings file. \n" @@ -1830,7 +1839,7 @@ bool LLAppViewer::initConfiguration() } // - load overrides from user_settings - loadSettingsFromDirectory("User"); + loadSettingsFromDirectory(settings_w, "User"); // - apply command line settings clp.notify(); @@ -1910,7 +1919,7 @@ bool LLAppViewer::initConfiguration() { const std::string& name = *itr; const std::string& value = *(++itr); - LLControlVariable* c = gSettings[sGlobalSettingsName]->getControl(name); + LLControlVariable* c = settings[sGlobalSettingsName]->getControl(name); if(c) { c->setValue(value, false); diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 14a39a6f9..933d4150a 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -33,7 +33,8 @@ #ifndef LL_LLAPPVIEWER_H #define LL_LLAPPVIEWER_H -#include "llsys.h" // LLOSInfo +#include "llsys.h" // LLOSInfo +#include "llviewercontrol.h" // settings_map_type class LLTextureCache; class LLImageDecodeThread; @@ -140,11 +141,12 @@ public: // Load settings from the location specified by loction_key. // Key availale and rules for loading, are specified in // 'app_settings/settings_files.xml' - bool loadSettingsFromDirectory(const std::string& location_key, - bool set_defaults = false); + bool loadSettingsFromDirectory(AIReadAccess const& settings_r, + std::string const& location_key, + bool set_defaults = false); - std::string getSettingsFilename(const std::string& location_key, - const std::string& file); + std::string getSettingsFilename(std::string const& location_key, + std::string const& file); // For thread debugging. // llstartup needs to control init. diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp index 7e0557d17..2d7ce1da4 100644 --- a/indra/newview/llfloatersettingsdebug.cpp +++ b/indra/newview/llfloatersettingsdebug.cpp @@ -104,7 +104,7 @@ BOOL LLFloaterSettingsDebug::postBuild() void LLFloaterSettingsDebug::draw() { LLComboBox* settings_combo = getChild("settings_combo"); - LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata(); + LLControlVariable* controlp = static_cast(settings_combo->getCurrentUserdata()); updateControl(controlp ? controlp->getCOAActive() : NULL); LLFloater::draw(); @@ -127,8 +127,8 @@ void LLFloaterSettingsDebug::show(void*) void LLFloaterSettingsDebug::onSettingSelect(LLUICtrl* ctrl, void* user_data) { LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data; - LLComboBox* combo_box = (LLComboBox*)ctrl; - LLControlVariable* controlp = (LLControlVariable*)combo_box->getCurrentUserdata(); + LLComboBox* combo_box = static_cast(ctrl); + LLControlVariable* controlp = static_cast(combo_box->getCurrentUserdata()); floaterp->updateControl(controlp ? controlp->getCOAActive() : NULL); } @@ -139,7 +139,7 @@ void LLFloaterSettingsDebug::onCommitSettings(LLUICtrl* ctrl, void* user_data) LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data; LLComboBox* settings_combo = floaterp->getChild("settings_combo"); - LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata(); + LLControlVariable* controlp = static_cast(settings_combo->getCurrentUserdata()); controlp = controlp ? controlp->getCOAActive() : NULL; if(!controlp)//Uh oh! return; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 519ce8d87..e08bc301a 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -985,7 +985,7 @@ bool idle_startup() ); // Overwrite default user settings with user settings - LLAppViewer::instance()->loadSettingsFromDirectory("Account"); + LLAppViewer::instance()->loadSettingsFromDirectory(AIReadAccess(gSettings), "Account"); // Need to set the LastLogoff time here if we don't have one. LastLogoff is used for "Recent Items" calculation // and startup time is close enough if we don't have a real value. diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 22609c938..23c9535fa 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -75,6 +75,7 @@ #include "llnetmap.h" #include "llrender.h" #include "llfloaterchat.h" +#include "aithreadsafe.h" #include "llviewerobjectlist.h" #include "lldrawpoolbump.h" #include "emeraldboobutils.h" @@ -83,8 +84,7 @@ BOOL gHackGodmode = FALSE; #endif - -std::map gSettings; +AITHREADSAFE(settings_map_type, gSettings,); LLControlGroup gSavedSettings; // saved at end of session LLControlGroup gSavedPerAccountSettings; // saved at end of session LLControlGroup gColors; // read-only diff --git a/indra/newview/llviewercontrol.h b/indra/newview/llviewercontrol.h index 9c2e112c9..8835146ad 100644 --- a/indra/newview/llviewercontrol.h +++ b/indra/newview/llviewercontrol.h @@ -36,6 +36,7 @@ #include #include "llcontrol.h" #include "lluictrl.h" +#include "aithreadsafe.h" // Enabled this definition to compile a 'hacked' viewer that // allows a hacked godmode to be toggled on and off. @@ -48,7 +49,8 @@ extern BOOL gHackGodmode; //setting variables are declared in this function void settings_setup_listeners(); -extern std::map gSettings; +typedef std::map settings_map_type; +extern AIThreadSafe gSettings; // for the graphics settings void create_graphics_group(LLControlGroup& group); diff --git a/indra/newview/tests/llagentaccess_test.cpp b/indra/newview/tests/llagentaccess_test.cpp index 5c31afb64..750c9faa5 100644 --- a/indra/newview/tests/llagentaccess_test.cpp +++ b/indra/newview/tests/llagentaccess_test.cpp @@ -43,7 +43,7 @@ class LLControlGroupReader_Test : public LLControlGroupReader public: LLControlGroupReader_Test() : test_preferred_maturity(SIM_ACCESS_PG) {} - virtual std::string getString(const std::string& name) + virtual std::string getString(const std::string& name) const { return ""; } From 0638fafe661075512535f4a1b44fe8979162151b Mon Sep 17 00:00:00 2001 From: Shyotl Date: Sun, 8 May 2011 12:46:42 -0500 Subject: [PATCH 17/44] Fixing Win compile. (Partial) --- indra/cmake/ViewerMiscLibs.cmake | 2 +- indra/llcommon/aithreadsafe.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake index 38d044473..e52492c38 100644 --- a/indra/cmake/ViewerMiscLibs.cmake +++ b/indra/cmake/ViewerMiscLibs.cmake @@ -2,9 +2,9 @@ include(Prebuilt) if (NOT STANDALONE) - use_prebuilt_binary(libuuid) use_prebuilt_binary(vivox) if(LINUX) + use_prebuilt_binary(libuuid) if (${ARCH} STREQUAL "x86_64") use_prebuilt_binary(32bitcompatibilitylibs) endif (${ARCH} STREQUAL "x86_64") diff --git a/indra/llcommon/aithreadsafe.h b/indra/llcommon/aithreadsafe.h index 70cd2a3db..0d0a6ac1d 100644 --- a/indra/llcommon/aithreadsafe.h +++ b/indra/llcommon/aithreadsafe.h @@ -288,7 +288,7 @@ protected: //! Constructor used by AIWriteAccess. AIReadAccess(AIThreadSafe& wrapper, state_type state) : AIReadAccessConst(wrapper, state) { } - friend class AIWriteAccess; + friend struct AIWriteAccess; }; /** From 1a099167aea7e726905ef48b6ec7cdc68d7f6ad9 Mon Sep 17 00:00:00 2001 From: Shyotl Date: Sun, 8 May 2011 12:46:42 -0500 Subject: [PATCH 18/44] Fixing Win compile. (Partial) --- indra/cmake/ViewerMiscLibs.cmake | 2 +- indra/llcommon/aithreadsafe.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake index 38d044473..e52492c38 100644 --- a/indra/cmake/ViewerMiscLibs.cmake +++ b/indra/cmake/ViewerMiscLibs.cmake @@ -2,9 +2,9 @@ include(Prebuilt) if (NOT STANDALONE) - use_prebuilt_binary(libuuid) use_prebuilt_binary(vivox) if(LINUX) + use_prebuilt_binary(libuuid) if (${ARCH} STREQUAL "x86_64") use_prebuilt_binary(32bitcompatibilitylibs) endif (${ARCH} STREQUAL "x86_64") diff --git a/indra/llcommon/aithreadsafe.h b/indra/llcommon/aithreadsafe.h index 70cd2a3db..0d0a6ac1d 100644 --- a/indra/llcommon/aithreadsafe.h +++ b/indra/llcommon/aithreadsafe.h @@ -288,7 +288,7 @@ protected: //! Constructor used by AIWriteAccess. AIReadAccess(AIThreadSafe& wrapper, state_type state) : AIReadAccessConst(wrapper, state) { } - friend class AIWriteAccess; + friend struct AIWriteAccess; }; /** From 2529644e900b9fa2abae689c1412916ad3cce834 Mon Sep 17 00:00:00 2001 From: Shyotl Date: Sun, 8 May 2011 16:25:03 -0500 Subject: [PATCH 19/44] Should now compile on VC100 again. --- indra/llcommon/llsys.cpp | 2 +- indra/newview/llfloaterabout.cpp | 1 - indra/newview/llweb.cpp | 2 +- indra/newview/llwindebug.cpp | 3 ++- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index d729d9883..bde0cbd6e 100644 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -74,7 +74,7 @@ extern int errno; static const S32 CPUINFO_BUFFER_SIZE = 16383; -LLCPUInfo gSysCPU; +LL_COMMON_API LLCPUInfo gSysCPU; #if LL_WINDOWS #ifndef DLLVERSIONINFO diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index ed4e378e3..62b0ee495 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -75,7 +75,6 @@ -extern LLCPUInfo gSysCPU; extern LLMemoryInfo gSysMemory; extern U32 gPacketsIn; diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index b57e4bcc8..5bca8db8e 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -74,7 +74,7 @@ std::string LLWeb::curlEscape(const std::string& url) std::stringstream escaped_url; for (std::string::const_iterator iter = url.begin(); iter != url.end(); ++iter) { - if (std::isalnum(*iter)) + if (isalnum(*iter)) escaped_url << *iter; else escaped_url << '%' << std::hex << std::setfill('0') << std::setw(2) << std::uppercase << (int)*iter; diff --git a/indra/newview/llwindebug.cpp b/indra/newview/llwindebug.cpp index 59bc9dc62..bc8281480 100644 --- a/indra/newview/llwindebug.cpp +++ b/indra/newview/llwindebug.cpp @@ -862,7 +862,8 @@ void LLWinDebug::generateCrashStacks(struct _EXCEPTION_POINTERS *exception_infop // Since there is exception info... Release the hounds. gEmergencyMemoryReserve.release(); - if(gSavedSettings.getControl("SaveMinidump").notNull() && gSavedSettings.getBOOL("SaveMinidump")) + LLControlVariable* save_minimap = gSavedSettings.getControl("SaveMinidump"); + if(save_minimap && save_minimap->getValue().asBoolean()) { _MINIDUMP_EXCEPTION_INFORMATION ExInfo; From 8d2b56b1eb3b156a24389f184d3c5e15b6b7e58a Mon Sep 17 00:00:00 2001 From: Siana Gearz Date: Sun, 8 May 2011 23:25:21 +0200 Subject: [PATCH 20/44] Fixed prebuilt fetching, Snowglobe style --- indra/CMakeLists.txt | 40 ++++++++++----------- indra/cmake/FindMyZLIB.cmake | 46 ++++++++++++++++++++++++ indra/cmake/Prebuilt.cmake | 47 ++++--------------------- indra/llplugin/CMakeLists.txt | 2 ++ indra/media_plugins/base/CMakeLists.txt | 2 ++ 5 files changed, 76 insertions(+), 61 deletions(-) create mode 100644 indra/cmake/FindMyZLIB.cmake diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt index e81510b2c..33637ab1e 100644 --- a/indra/CMakeLists.txt +++ b/indra/CMakeLists.txt @@ -132,27 +132,25 @@ endif (SERVER) # Configure prebuilt binary download. This must be done last so that # all subdirectories have a chance to list the packages they need. -if(NOT STANDALONE) - # We need scp for proprietary downloads. - if(INSTALL_PROPRIETARY) - include(FindSCP) - endif(INSTALL_PROPRIETARY) +# We need scp for proprietary downloads. +if(INSTALL_PROPRIETARY) + include(FindSCP) +endif(INSTALL_PROPRIETARY) - # The use_prebuilt_binary macro in cmake/Prebuilt.cmake records - # packages in the PREBUILT property of the 'prepare' target. - get_property(PREBUILT_PACKAGES TARGET prepare PROPERTY PREBUILT) +# The use_prebuilt_binary macro in cmake/Prebuilt.cmake records +# packages in the PREBUILT property of the 'prepare' target. +get_property(PREBUILT_PACKAGES TARGET prepare PROPERTY PREBUILT) - # Create a script to download the needed binaries. - configure_file(${CMAKE_SOURCE_DIR}/cmake/DownloadPrebuilt.cmake.in - ${CMAKE_BINARY_DIR}/DownloadPrebuilt.cmake @ONLY) +# Create a script to download the needed binaries. +configure_file(${CMAKE_SOURCE_DIR}/cmake/DownloadPrebuilt.cmake.in + ${CMAKE_BINARY_DIR}/DownloadPrebuilt.cmake @ONLY) - # Drive the download script at build time. Depend on 'install.xml' - # to aqcuire new binaries when needed. - add_custom_command( - COMMENT "Obtaining prebuilt binaries..." - OUTPUT ${CMAKE_BINARY_DIR}/prepare/prebuilt - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/DownloadPrebuilt.cmake - DEPENDS ${CMAKE_SOURCE_DIR}/../install.xml - ${CMAKE_BINARY_DIR}/DownloadPrebuilt.cmake - ) -endif(NOT STANDALONE) +# Drive the download script at build time. Depend on 'install.xml' +# to aqcuire new binaries when needed. +add_custom_command( + COMMENT "Obtaining prebuilt binaries..." + OUTPUT ${CMAKE_BINARY_DIR}/prepare/prebuilt + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/DownloadPrebuilt.cmake + DEPENDS ${CMAKE_SOURCE_DIR}/../install.xml + ${CMAKE_BINARY_DIR}/DownloadPrebuilt.cmake + ) diff --git a/indra/cmake/FindMyZLIB.cmake b/indra/cmake/FindMyZLIB.cmake new file mode 100644 index 000000000..6d630f1ba --- /dev/null +++ b/indra/cmake/FindMyZLIB.cmake @@ -0,0 +1,46 @@ +# -*- cmake -*- + +# - Find zlib +# Find the ZLIB includes and library +# This module defines +# ZLIB_INCLUDE_DIRS, where to find zlib.h, etc. +# ZLIB_LIBRARIES, the libraries needed to use zlib. +# ZLIB_FOUND, If false, do not try to use zlib. +# +# This FindZLIB is about 43 times as fast the one provided with cmake (2.8.x), +# because it doesn't look up the version of zlib, resulting in a dramatic +# speed up for configure (from 4 minutes 22 seconds to 6 seconds). +# +# Note: Since this file is only used for standalone, the windows +# specific parts were left out. + +FIND_PATH(ZLIB_INCLUDE_DIR zlib.h + NO_SYSTEM_ENVIRONMENT_PATH + ) + +FIND_LIBRARY(ZLIB_LIBRARY z) + +if (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) + SET(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR}) + SET(ZLIB_LIBRARIES ${ZLIB_LIBRARY}) + SET(ZLIB_FOUND "YES") +else (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) + SET(ZLIB_FOUND "NO") +endif (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) + +if (ZLIB_FOUND) + if (NOT ZLIB_FIND_QUIETLY) + message(STATUS "Found ZLIB: ${ZLIB_LIBRARIES}") + SET(ZLIB_FIND_QUIETLY TRUE) + endif (NOT ZLIB_FIND_QUIETLY) +else (ZLIB_FOUND) + if (ZLIB_FIND_REQUIRED) + message(FATAL_ERROR "Could not find ZLIB library") + endif (ZLIB_FIND_REQUIRED) +endif (ZLIB_FOUND) + +mark_as_advanced( + ZLIB_LIBRARY + ZLIB_INCLUDE_DIR + ) + diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake index a91519278..6dd9c47bd 100644 --- a/indra/cmake/Prebuilt.cmake +++ b/indra/cmake/Prebuilt.cmake @@ -1,44 +1,11 @@ # -*- cmake -*- -include(Python) -include(FindSCP) - macro (use_prebuilt_binary _binary) - if (NOT STANDALONE) - if(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed) - if(INSTALL_PROPRIETARY) - include(FindSCP) - if(DEBUG_PREBUILT) - message("cd ${SCRIPTS_DIR} && ${PYTHON_EXECUTABLE} install.py --install-dir=${CMAKE_SOURCE_DIR}/.. --scp=${SCP_EXECUTABLE} ${_binary}") - endif(DEBUG_PREBUILT) - execute_process(COMMAND ${PYTHON_EXECUTABLE} - install.py - --install-dir=${CMAKE_SOURCE_DIR}/.. - --scp=${SCP_EXECUTABLE} - ${_binary} - WORKING_DIRECTORY ${SCRIPTS_DIR} - RESULT_VARIABLE ${_binary}_installed - ) - else(INSTALL_PROPRIETARY) - if(DEBUG_PREBUILT) - message("cd ${SCRIPTS_DIR} && ${PYTHON_EXECUTABLE} install.py --install-dir=${CMAKE_SOURCE_DIR}/.. ${_binary}") - endif(DEBUG_PREBUILT) - execute_process(COMMAND ${PYTHON_EXECUTABLE} - install.py - --install-dir=${CMAKE_SOURCE_DIR}/.. - ${_binary} - WORKING_DIRECTORY ${SCRIPTS_DIR} - RESULT_VARIABLE ${_binary}_installed - ) - endif(INSTALL_PROPRIETARY) - file(WRITE ${CMAKE_BINARY_DIR}/temp/${_binary}_installed "${${_binary}_installed}") - else(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed) - set(${_binary}_installed 0) - endif(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed) - if(NOT ${_binary}_installed EQUAL 0) - message(FATAL_ERROR - "Failed to download or unpack prebuilt '${_binary}'." - " Process returned ${${_binary}_installed}.") - endif (NOT ${_binary}_installed EQUAL 0) - endif (NOT STANDALONE) + if(NOT STANDALONE) + get_property(PREBUILT_PACKAGES TARGET prepare PROPERTY PREBUILT) + list(FIND PREBUILT_PACKAGES ${_binary} _index) + if(_index LESS 0) + set_property(TARGET prepare APPEND PROPERTY PREBUILT ${_binary}) + endif(_index LESS 0) + endif(NOT STANDALONE) endmacro (use_prebuilt_binary _binary) diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt index 7a7f4e583..c60ca2e5b 100644 --- a/indra/llplugin/CMakeLists.txt +++ b/indra/llplugin/CMakeLists.txt @@ -64,6 +64,8 @@ list(APPEND llplugin_SOURCE_FILES ${llplugin_HEADER_FILES}) add_library (llplugin ${llplugin_SOURCE_FILES}) +add_dependencies(llplugin prepare) + add_subdirectory(slplugin) # # Add tests diff --git a/indra/media_plugins/base/CMakeLists.txt b/indra/media_plugins/base/CMakeLists.txt index 8d620433a..817c842bf 100644 --- a/indra/media_plugins/base/CMakeLists.txt +++ b/indra/media_plugins/base/CMakeLists.txt @@ -47,3 +47,5 @@ add_library(media_plugin_base ${media_plugin_base_SOURCE_FILES} ) +add_dependencies(media_plugin_base prepare) + From e371c2e93dcb9213332d853da1a404cddd0159ef Mon Sep 17 00:00:00 2001 From: Siana Gearz Date: Mon, 9 May 2011 00:40:38 +0200 Subject: [PATCH 21/44] Repo cleanup. Sheesh, who packaged pics with a lib? --- LICENSES/GL.txt | 22 ---- LICENSES/SDL.txt | 22 ---- LICENSES/gtk-atk-pango-glib.txt | 182 --------------------------- LICENSES/mesa.txt | 58 --------- LICENSES/ogg-vorbis.txt | 29 ----- LICENSES/tut.txt | 10 -- LICENSES/vivox.txt | 180 -------------------------- indra/cmake/LLWindow.cmake | 2 +- indra/newview/dbghelp.dll | Bin 1038848 -> 0 bytes indra/test_apps/terrain_mule/SDL.dll | Bin 229376 -> 0 bytes install.xml | 4 +- 11 files changed, 3 insertions(+), 506 deletions(-) delete mode 100644 LICENSES/GL.txt delete mode 100644 LICENSES/SDL.txt delete mode 100644 LICENSES/gtk-atk-pango-glib.txt delete mode 100644 LICENSES/mesa.txt delete mode 100644 LICENSES/ogg-vorbis.txt delete mode 100644 LICENSES/tut.txt delete mode 100644 LICENSES/vivox.txt delete mode 100644 indra/newview/dbghelp.dll delete mode 100644 indra/test_apps/terrain_mule/SDL.dll diff --git a/LICENSES/GL.txt b/LICENSES/GL.txt deleted file mode 100644 index dd124a024..000000000 --- a/LICENSES/GL.txt +++ /dev/null @@ -1,22 +0,0 @@ -Mesa 3-D graphics library -Version: 6.2 - -Copyright (C) 1999-2004 Brian Paul All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/LICENSES/SDL.txt b/LICENSES/SDL.txt deleted file mode 100644 index 630b88627..000000000 --- a/LICENSES/SDL.txt +++ /dev/null @@ -1,22 +0,0 @@ -SDL - Simple DirectMedia Layer -Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public -License as published by the Free Software Foundation; either -version 2 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Sam Lantinga -slouken@libsdl.org - -The GNU Library GPL is available at http://www.gnu.org/copyleft/lesser.html - diff --git a/LICENSES/gtk-atk-pango-glib.txt b/LICENSES/gtk-atk-pango-glib.txt deleted file mode 100644 index 07a2d156d..000000000 --- a/LICENSES/gtk-atk-pango-glib.txt +++ /dev/null @@ -1,182 +0,0 @@ -http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html - -LGPL v 2.1 - -Version 2.1, February 1999 - -Copyright (C) 1991, 1999 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. - - To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. - - Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. - - When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. - - We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. - - For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. - - Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. - - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. - - Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. - - You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - - * a) The modified work must itself be a software library. - * b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. - * c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. - * d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. - - (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. - -Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. - -This option is useful when you wish to copy part of the code of the Library into a program that is not a library. - -4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. - -If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. - -5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. - -However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. - -When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. - -If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) - -Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. - -6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. - -You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: - - * a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) - * b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. - * c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. - * d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. - * e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. - -For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - -It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. - -7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: - - * a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. - * b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. - -8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. - -10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. - -11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. - -14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS -How to Apply These Terms to Your New Libraries - -If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). - -To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - -one line to give the library's name and an idea of what it does. -Copyright (C) year name of author - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in -the library `Frob' (a library for tweaking knobs) written -by James Random Hacker. - -signature of Ty Coon, 1 April 1990 -Ty Coon, President of Vice - -That's all there is to it! - diff --git a/LICENSES/mesa.txt b/LICENSES/mesa.txt deleted file mode 100644 index cb275f35e..000000000 --- a/LICENSES/mesa.txt +++ /dev/null @@ -1,58 +0,0 @@ -http://www.mesa3d.org/license.html - -License / Copyright Information - -The Mesa distribution consists of several components. Different copyrights and licenses apply to different components. For example, GLUT is copyrighted by Mark Kilgard, some demo programs are copyrighted by SGI, some of the Mesa device drivers are copyrighted by their authors. See below for a list of Mesa's main components and the license for each. - -The core Mesa library is licensed according to the terms of the MIT license. This allows integration with the XFree86, Xorg and DRI projects. - -The default Mesa license is as follows: - -Copyright (C) 1999-2007 Brian Paul All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Attention, Contributors - -When contributing to the Mesa project you must agree to the licensing terms of the component to which you're contributing. The following section lists the primary components of the Mesa distribution and their respective licenses. -Mesa Component Licenses - -Component Location Primary Author License ----------------------------------------------------------------------------- -Main Mesa code src/mesa/ Brian Paul Mesa (MIT) - -Device drivers src/mesa/drivers/* See drivers See drivers - -Ext headers include/GL/glext.h SGI SGI Free B - include/GL/glxext.h - -GLUT src/glut/ Mark Kilgard Mark's copyright - -Mesa GLU library src/glu/mesa/ Brian Paul GNU-LGPL - -SGI GLU library src/glu/sgi/ SGI SGI Free B - -demo programs progs/demos/ various see source files - -X demos progs/xdemos/ Brian Paul see source files - -SGI demos progs/samples/ SGI SGI copyright - -RedBook demos progs/redbook/ SGI SGI copyright - - diff --git a/LICENSES/ogg-vorbis.txt b/LICENSES/ogg-vorbis.txt deleted file mode 100644 index 585f13729..000000000 --- a/LICENSES/ogg-vorbis.txt +++ /dev/null @@ -1,29 +0,0 @@ -Copyright (c) 2001, Xiphophorus - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -- Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -- Neither the name of the Xiphophorus nor the names of its contributors -may be used to endorse or promote products derived from this software -without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/LICENSES/tut.txt b/LICENSES/tut.txt deleted file mode 100644 index bcd715a17..000000000 --- a/LICENSES/tut.txt +++ /dev/null @@ -1,10 +0,0 @@ - Copyright 2002-2006 Vladimir Dyuzhev -Copyright 2007 Denis Kononenko -Copyright 2008 Micha? Rzechonek - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/LICENSES/vivox.txt b/LICENSES/vivox.txt deleted file mode 100644 index dd70e8a77..000000000 --- a/LICENSES/vivox.txt +++ /dev/null @@ -1,180 +0,0 @@ -================= -Vivox SDK License -================= - -RSA Data Security, Inc. MD5 Message-Digest Algorithm - -Audio coding: Polycom¨ Siren14TM (ITU-T Rec. G.722.1 Annex C) - -Open Source Software Licensing -Each open source software component utilized by this product is subject to its own copyright and licensing terms, as listed below. - - -************************************************************* -************************************************************* - -/** - * OpenAL cross platform audio library - * Copyright (C) 1999-2000 by authors. - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * Or go to http://www.gnu.org/copyleft/lgpl.html - */ - -************************************************************* -************************************************************* -RTP code under Lesser General Public License - -/* -The oRTP library is an RTP (Realtime Transport Protocol - rfc3550) stack. -Copyright (C) 2001 Simon MORLAT simon.morlat@linphone.org - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -************************************************************ -************************************************************* - - - - -/* - * The Vovida Software License, Version 1.0 - * - * Copyright (c) 2000 Vovida Networks, Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The names "VOCAL", "Vovida Open Communication Application Library", - * and "Vovida Open Communication Application Library (VOCAL)" must - * not be used to endorse or promote products derived from this - * software without prior written permission. For written - * permission, please contact vocal@vovida.org. - * - * 4. Products derived from this software may not be called "VOCAL", nor - * may "VOCAL" appear in their name, without prior written - * permission of Vovida Networks, Inc. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND - * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA - * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES - * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - * - * This software consists of voluntary contributions made by Vovida - * Networks, Inc. and many individuals on behalf of Vovida Networks, - * Inc. For more information on Vovida Networks, Inc., please see - * - * - */ -************************************************************* -************************************************************* - -Internet Software Consortium code - -/* This is from the BIND 4.9.4 release, modified to compile by itself*/ -/* Copyright (c) 1996 by Internet Software Consortium. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS - * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE - * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ - -************************************************************* - -************************************************************* - -************************************************************ - -http://tinyxpath.sourceforge.net/ - -TinyXPath is covered by the zlib license : - - www.sourceforge.net/projects/tinyxpath - Copyright (c) 2002-2006 Yves Berquin (yvesb@users.sourceforge.net) - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any - damages arising from the use of this software. - - Permission is granted to anyone to use this software for any - purpose, including commercial applications, and to alter it and - redistribute it freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must - not claim that you wrote the original software. If you use this - software in a product, an acknowledgment in the product documentation - would be appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source distribution. - - -************************************************************ -************************************************************ - -THE FREE SOFTWARE FOUNDATION - -Any customer may request the source code for all open source portions of this product which are covered by the Free Software Foundation's General Public License (GPL), for a period of three years from purchase. Please contact the vendor from whom you obtained this product for instructions. A fee equivalent to the cost of making the code available may be charged. Alternatively, customers may choose to download desired GPL components directly from their original vendors. Specifically, this product contains the following GPL-licensed components: - -From Vivox: - - Assorted software components. To request source, contact Vivox at: - Vivox, Inc. - Attn: customer support - 40 Speen Street Suite 402 - Framingham, MA 01701 - diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake index 409a8335c..5cf92335e 100644 --- a/indra/cmake/LLWindow.cmake +++ b/indra/cmake/LLWindow.cmake @@ -13,11 +13,11 @@ if (STANDALONE) SDL_LIBRARY ) else (STANDALONE) - use_prebuilt_binary(SDL) if (NOT DARWIN) use_prebuilt_binary(mesa) endif (NOT DARWIN) if (LINUX AND VIEWER) + use_prebuilt_binary(SDL) set (SDL_FOUND TRUE) set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/i686-linux) set (SDL_LIBRARY SDL) diff --git a/indra/newview/dbghelp.dll b/indra/newview/dbghelp.dll deleted file mode 100644 index a5a71ca0ffb65fb9e7963528d6d764aa8be698e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1038848 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 z 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૝Y$X|PtAzyKZ{G}k@#3$G@O1jlH>Ir&B#Im2B zd(worvT;#eNLXSS$^Iv>?GO8#SE}hND9~rj&;FI#3=8C047&A=#8cdM5_k*b=CvN& zAVWVw##)`OJ%%SBLVEOGy#8bwFw5IOOQ=WR>AXRYHac(6qt`mG_2?D2%X@SVA^w_S zwnW&+CYrPLZE8*<)%(r))#Efr4fz-`K|?+ucP_7Fkfwe_nya-znADJarZ%JpEQA{J zIp+-;vcY+ShNPX>8nPC5c|%qa;?@a;mGE+{Y<5$jS4p@J|ADuvK}!iOk)|cNMD5aw zTv4<|Khu+@u5tP0uCv0fS7El+lMA}k&l%|QexGLAZ((KD&{Vtrid=IY>PouV#%lpK z9oeNeuGd}uJVYj0OL2iqeE;Q^ICjRwwIudI`==(gbBRFf-oZCbl85fmkGf~!`?AO3qe_cf#KEO?He;1Kh2Xj�fzl%YbagrknM$A2Zwq2Y=n$LiiP>=3+-k?Xn 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%0Di~V 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/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

;v89#<2tpWyl~t~y)`aS2R{|70Hl9)QF16CvT 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�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 N8py4I|7$hyzX17ySg`;A diff --git a/install.xml b/install.xml index 1e7d77ee3..25deecc25 100644 --- a/install.xml +++ b/install.xml @@ -63,9 +63,9 @@ linux md5sum - 25f8a8fc4ea94169fe6222571b8d5e55 + 7952d45a61dc01faf1d9fd67023d96bd url - http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.12-linux-20081222c.tar.bz2 + https://github.com/downloads/siana/SingularityViewer/SDL-1.2.12-linux-20081222d.tar.bz2 windows From 8227efcaf1974d3dc80368bc1b82d6421bc53155 Mon Sep 17 00:00:00 2001 From: Siana Gearz Date: Mon, 9 May 2011 13:35:51 +0200 Subject: [PATCH 22/44] Make our build and packaging shine again --- indra/cmake/GooglePerfTools.cmake | 4 +-- indra/lib/python/indra/util/llmanifest.py | 18 ++++++------ indra/newview/viewer_manifest.py | 35 +++++++++++------------ 3 files changed, 28 insertions(+), 29 deletions(-) diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake index 0b483e5cf..a71e29df3 100644 --- a/indra/cmake/GooglePerfTools.cmake +++ b/indra/cmake/GooglePerfTools.cmake @@ -43,9 +43,9 @@ else (USE_GOOGLE_PERFTOOLS) set(TCMALLOC_FLAG -ULL_USE_TCMALLOC) endif (USE_GOOGLE_PERFTOOLS) -if (NOT(DISABLE_TCMALLOC OR NOT USE_GOOGLE_PERFTOOLS)) +if (NOT(DISABLE_TCMALLOC OR USE_GOOGLE_PERFTOOLS OR STANDALONE)) message(STATUS "Building with Google TCMalloc") - set(TCMALLOC_FLAG -DLL_USE_TCMALLOC=1_) + set(TCMALLOC_FLAG -DLL_USE_TCMALLOC=1) include_directories(${GOOGLE_PERFTOOLS_INCLUDE_DIR}) set(GOOGLE_PERFTOOLS_LIBRARIES ${TCMALLOC_LIBRARIES}) set(GOOGLE_PERFTOOLS_LINKER_FLAGS ${TCMALLOC_LINKER_FLAGS}) diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py index 585b47d4a..492fd3700 100644 --- a/indra/lib/python/indra/util/llmanifest.py +++ b/indra/lib/python/indra/util/llmanifest.py @@ -119,7 +119,6 @@ ARGUMENTS=[ Example use: %(name)s --arch=i686 On Linux this would try to use Linux_i686Manifest.""", default=""), - dict(name='artwork', description='Artwork directory.', default=DEFAULT_SRCTREE), dict(name='build', description='Build directory.', default=DEFAULT_SRCTREE), dict(name='buildtype', description="""The build type used. ('Debug', 'Release', 'ReleaseSSE2' or 'RelWithDebInfo') Default is Release """, @@ -127,9 +126,6 @@ ARGUMENTS=[ dict(name='branding_id', description="""Identifier for the branding set to use. Currently, 'secondlife' or 'snowglobe')""", default='secondlife'), - dict(name='channel', - description="""The channel to use for updates, packaging, settings name, etc.""", - default=get_channel), dict(name='configuration', description="""The build configuration used. Only used on OS X for now, but it could be used for other platforms as well.""", @@ -140,13 +136,16 @@ ARGUMENTS=[ though it's not strictly a grid, 'firstlook' is also an acceptable value for this parameter.""", default=""), + dict(name='channel', + description="""The channel to use for updates, packaging, settings name, etc.""", + default=get_channel), + dict(name='login_channel', + description="""The channel to use for login handshake/updates only.""", + default=None), dict(name='installer_name', description=""" The name of the file that the installer should be packaged up into. Only used on Linux at the moment.""", default=None), - dict(name='login_channel', - description="""The channel to use for login handshake/updates only.""", - default=None), dict(name='login_url', description="""The url that the login screen displays in the client.""", default=None), @@ -160,6 +159,7 @@ ARGUMENTS=[ dict(name='standalone', description='Set to ON if this is a standalone build.', default="OFF"), + dict(name='artwork', description='Artwork directory.', default=DEFAULT_SRCTREE), dict(name='touch', description="""File to touch when action is finished. Touch file will contain the name of the final package in a form suitable @@ -637,9 +637,9 @@ class LLManifest(object): is_glob = False # look under each prefix for matching paths - paths = [os.path.join(self.get_src_prefix(), src), + paths = set([os.path.join(self.get_src_prefix(), src), os.path.join(self.get_artwork_prefix(), src), - os.path.join(self.get_build_prefix(), src)] + os.path.join(self.get_build_prefix(), src)]) for path in paths: if self.wildcard_pattern.search(path): is_glob = True diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 9ca3b4704..8c2b42f5e 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -263,19 +263,21 @@ class WindowsManifest(ViewerManifest): self.path("skins/default/xui/en-us/mime_types_windows.xml", "skins/default/xui/en-us/mime_types.xml") # Get llcommon and deps. If missing assume static linkage and continue. - #~ if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""): - #~ try: - #~ self.path('llcommon.dll') - #~ except RuntimeError, err: - #~ print err.message - #~ print "Skipping llcommon.dll (assuming llcommon was linked statically)" - #~ try: - #~ self.path('libapr-1.dll') - #~ self.path('libaprutil-1.dll') - #~ self.path('libapriconv-1.dll') - #~ except RuntimeError, err: - #~ pass - #~ self.end_prefix() + if self.prefix(src=self.args['configuration'], dst=""): + try: + self.path('llcommon.dll') + except RuntimeError, err: + print err.message + print "Skipping llcommon.dll (assuming llcommon was linked statically)" + self.end_prefix() + if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""): + try: + self.path('libapr-1.dll') + self.path('libaprutil-1.dll') + self.path('libapriconv-1.dll') + except RuntimeError, err: + pass + self.end_prefix() # For google-perftools tcmalloc allocator. self.path("../../libraries/i686-win32/lib/release/libtcmalloc_minimal.dll", dst="libtcmalloc_minimal.dll") @@ -454,9 +456,6 @@ class DarwinManifest(ViewerManifest): self.path("../../libraries/universal-darwin/lib_release/libvorbis.0.dylib", dst="MacOS/libvorbis.0.dylib") self.path("../../libraries/universal-darwin/lib_release/libogg.0.dylib", dst="MacOS/libogg.0.dylib") - # hunspell library - #self.path("../../libraries/universal-darwin/lib_release/libhunspell-1.2.dylib", "MacOS/libhunspell-1.2.dylib"); - # most everything goes in the Resources directory if self.prefix(src="", dst="Resources"): super(DarwinManifest, self).construct() @@ -518,7 +517,8 @@ class DarwinManifest(ViewerManifest): # dependencies on shared libs mac_crash_logger_res_path = self.dst_path_of("mac-crash-logger.app/Contents/Resources") slplugin_res_path = self.dst_path_of("SLPlugin.app/Contents/Resources") - for libfile in ("libapr-1.0.3.7.dylib", + for libfile in ("libllcommon.dylib", + "libapr-1.0.3.7.dylib", "libaprutil-1.0.3.8.dylib", "libexpat.0.5.0.dylib"): target_lib = os.path.join('../../..', libfile) @@ -793,7 +793,6 @@ class Linux_i686Manifest(LinuxManifest): self.path("libalut.so") self.path("libopenal.so", "libopenal.so.1") self.path("libtcmalloc_minimal.so.0") - #self.path("libhunspell-1.2.so.0.0.0", "libhunspell-1.2.so.0") self.path("libtcmalloc_minimal.so.0.0.0") self.end_prefix("lib") From fa51d5257828d13e36dad651fc275455cc32463c Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Mon, 9 May 2011 20:22:04 +0200 Subject: [PATCH 23/44] Workaround for gcc 4.2.x. g++ 4.2 (and possibly earlier) apparently call a copy constructor when passing a temporary to a function that takes a const reference. Added code to allow copy-constructing the AI*Access classes for this compiler. g++-4.2.x also bails out when it encounters files that do not end on a newline. So, also added those where they were missing. --- indra/llaudio/llaudiodecodemgr.cpp | 2 +- indra/llcommon/aithreadsafe.h | 41 +++++++++++++++++++- indra/newview/ascentfloatercontactgroups.cpp | 2 +- indra/newview/ascentfloatercontactgroups.h | 2 +- indra/newview/ascentprefssys.h | 2 +- indra/newview/dsaparam.cpp | 2 +- indra/newview/emerald.cpp | 2 +- indra/newview/emeraldboobutils.cpp | 2 +- indra/newview/llpanelobject.cpp | 2 +- indra/newview/llphysicsmotion.cpp | 2 +- indra/newview/llpreviewgesture.cpp | 2 +- indra/newview/llpreviewscript.cpp | 2 +- indra/newview/llsavedsettingsglue.cpp | 2 +- indra/newview/qtoolalign.cpp | 2 +- indra/newview/qtoolalign.h | 2 +- indra/newview/scriptcounter.h | 2 +- indra/newview/wlfPanel_AdvSettings.cpp | 2 +- 17 files changed, 55 insertions(+), 18 deletions(-) diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp index 908eca5a6..41930f539 100644 --- a/indra/llaudio/llaudiodecodemgr.cpp +++ b/indra/llaudio/llaudiodecodemgr.cpp @@ -723,4 +723,4 @@ BOOL LLAudioDecodeMgr::addDecodeRequest(const LLUUID &uuid) } return FALSE; -} \ No newline at end of file +} diff --git a/indra/llcommon/aithreadsafe.h b/indra/llcommon/aithreadsafe.h index 0d0a6ac1d..795c15e0a 100644 --- a/indra/llcommon/aithreadsafe.h +++ b/indra/llcommon/aithreadsafe.h @@ -36,6 +36,11 @@ #include "llthread.h" #include "llerror.h" +// g++ 4.2.x (and before?) have the bug that when you try to pass a temporary +// to a function taking a const reference, it still calls the copy constructor. +// Define this to hack around that. +#define AI_NEED_ACCESS_CC (defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ < 3)) || (__GNUC__ < 4))) + template struct AIReadAccessConst; template struct AIReadAccess; template struct AIWriteAccess; @@ -66,6 +71,10 @@ protected: // Accessors. T const* ptr() const { return reinterpret_cast(mMemory); } T* ptr() { return reinterpret_cast(mMemory); } + +#if AI_NEED_ACCESS_CC + int mAccessCopyCount; +#endif }; /** @@ -239,12 +248,18 @@ struct AIReadAccessConst mState(readlocked) { mWrapper.mRWLock.rdlock(); +#if AI_NEED_ACCESS_CC + mWrapper.mAccessCopyCount = 1; +#endif } //! Destruct the AI*Access object. // These should never be dynamically allocated, so there is no need to make this virtual. ~AIReadAccessConst() { +#if AI_NEED_ACCESS_CC + if (--(this->mWrapper.mAccessCopyCount) > 0) return; +#endif if (mState == readlocked) mWrapper.mRWLock.rdunlock(); else if (mState == writelocked) @@ -267,9 +282,14 @@ protected: AIThreadSafe& mWrapper; //!< Reference to the object that we provide access to. state_type const mState; //!< The lock state that mWrapper is in. +#if !AI_NEED_ACCESS_CC private: // Disallow copy constructing directly. AIReadAccessConst(AIReadAccessConst const&); +#else +public: + AIReadAccessConst(AIReadAccessConst const& orig) : mWrapper(orig.mWrapper), mState(orig.mState) { mWrapper.mAccessCopyCount++; } +#endif }; /** @@ -461,7 +481,13 @@ template struct AIAccess { //! Construct a AIAccess from a non-constant AIThreadSafeSimple. - AIAccess(AIThreadSafeSimple& wrapper) : mWrapper(wrapper) { this->mWrapper.mMutex.lock(); } + AIAccess(AIThreadSafeSimple& wrapper) : mWrapper(wrapper) + { + this->mWrapper.mMutex.lock(); +#if AI_NEED_ACCESS_CC + this->mWrapper.mAccessCopyCount = 1; +#endif + } //! Access the underlaying object for (read and) write access. T* operator->() const { return this->mWrapper.ptr(); } @@ -469,14 +495,25 @@ struct AIAccess //! Access the underlaying object for (read and) write access. T& operator*() const { return *this->mWrapper.ptr(); } - ~AIAccess() { this->mWrapper.mMutex.unlock(); } + ~AIAccess() + { +#if AI_NEED_ACCESS_CC + if (--(this->mWrapper.mAccessCopyCount) > 0) return; +#endif + this->mWrapper.mMutex.unlock(); + } protected: AIThreadSafeSimple& mWrapper; //!< Reference to the object that we provide access to. +#if !AI_NEED_ACCESS_CC private: // Disallow copy constructing directly. AIAccess(AIAccess const&); +#else +public: + AIAccess(AIAccess const& orig) : mWrapper(orig.mWrapper) { this->mWrapper.mAccessCopyCount++; } +#endif }; #endif diff --git a/indra/newview/ascentfloatercontactgroups.cpp b/indra/newview/ascentfloatercontactgroups.cpp index 80f8a2204..d4097493d 100644 --- a/indra/newview/ascentfloatercontactgroups.cpp +++ b/indra/newview/ascentfloatercontactgroups.cpp @@ -238,4 +238,4 @@ void ASFloaterContactGroups::populateGroupList() } } } -} \ No newline at end of file +} diff --git a/indra/newview/ascentfloatercontactgroups.h b/indra/newview/ascentfloatercontactgroups.h index ed9fa44f1..809dce781 100644 --- a/indra/newview/ascentfloatercontactgroups.h +++ b/indra/newview/ascentfloatercontactgroups.h @@ -92,4 +92,4 @@ email for me right now, also in all cap. my father not very understand of free softwares and he make a fun of RMS. -*/ \ No newline at end of file +*/ diff --git a/indra/newview/ascentprefssys.h b/indra/newview/ascentprefssys.h index f9e507d9f..d62c9bdf1 100644 --- a/indra/newview/ascentprefssys.h +++ b/indra/newview/ascentprefssys.h @@ -100,4 +100,4 @@ protected: BOOL mSpellDisplay; }; -#endif \ No newline at end of file +#endif diff --git a/indra/newview/dsaparam.cpp b/indra/newview/dsaparam.cpp index e4c89d40e..c7720e61e 100644 --- a/indra/newview/dsaparam.cpp +++ b/indra/newview/dsaparam.cpp @@ -66,4 +66,4 @@ DSA *get_dsa2048() if ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL)) { DSA_free(dsa); return(NULL); } return(dsa); - } \ No newline at end of file + } diff --git a/indra/newview/emerald.cpp b/indra/newview/emerald.cpp index 1d89381cf..c2a31a65f 100644 --- a/indra/newview/emerald.cpp +++ b/indra/newview/emerald.cpp @@ -590,4 +590,4 @@ EDSA::~EDSA() { delete mDSAImpl; mDSAImpl = NULL; -} \ No newline at end of file +} diff --git a/indra/newview/emeraldboobutils.cpp b/indra/newview/emeraldboobutils.cpp index 12b784a7e..6d1238976 100644 --- a/indra/newview/emeraldboobutils.cpp +++ b/indra/newview/emeraldboobutils.cpp @@ -186,4 +186,4 @@ EmeraldBoobState EmeraldBoobUtils::idleUpdate(const EmeraldGlobalBoobConfig &con newState.boobGrav = llclamp(newState.boobGrav, -1.5f, 2.0f); return newState; -} \ No newline at end of file +} diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index f6ce2fe3b..9f8561835 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -2771,4 +2771,4 @@ void LLPanelObject::onPasteRotClip(void* user_data) calcp->setVar(LLCalc::Y_ROT, mClipboardRot.mV[VY]); calcp->setVar(LLCalc::Z_ROT, mClipboardRot.mV[VZ]); self->sendRotation(FALSE); -} \ No newline at end of file +} diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp index 18ec57fe7..d69ebd0b2 100644 --- a/indra/newview/llphysicsmotion.cpp +++ b/indra/newview/llphysicsmotion.cpp @@ -847,4 +847,4 @@ void LLPhysicsMotion::reset() mCharacter->setVisualParamWeight((*iter).mParam,(*iter).mParam->getDefaultWeight()); } } -} \ No newline at end of file +} diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index d26c7a64b..1c7a57abc 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -1789,4 +1789,4 @@ void LLPreviewGesture::onDonePreview(LLMultiGesture* gesture, void* data) self->mPreviewGesture = NULL; self->refresh(); -} \ No newline at end of file +} diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index ad54f5009..7b6bab72e 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -2669,4 +2669,4 @@ void LLLiveLSLEditor::saveAs() fclose(fp); fp = NULL; } -// \ No newline at end of file +// diff --git a/indra/newview/llsavedsettingsglue.cpp b/indra/newview/llsavedsettingsglue.cpp index 0e58b5f89..72879837f 100644 --- a/indra/newview/llsavedsettingsglue.cpp +++ b/indra/newview/llsavedsettingsglue.cpp @@ -182,4 +182,4 @@ void LLSavedSettingsGlue::setColor4(const std::string &name, LLColor4 value) gSavedSettings.setColor4(name, value); else gSavedPerAccountSettings.setColor4(name, value); -}*/ \ No newline at end of file +}*/ diff --git a/indra/newview/qtoolalign.cpp b/indra/newview/qtoolalign.cpp index 166c93f6a..b40faef40 100644 --- a/indra/newview/qtoolalign.cpp +++ b/indra/newview/qtoolalign.cpp @@ -626,4 +626,4 @@ void QToolAlign::align() LLSelectMgr::getInstance()->sendMultipleUpdate(UPD_POSITION); -} \ No newline at end of file +} diff --git a/indra/newview/qtoolalign.h b/indra/newview/qtoolalign.h index 168453da4..1bef073ba 100644 --- a/indra/newview/qtoolalign.h +++ b/indra/newview/qtoolalign.h @@ -46,4 +46,4 @@ private: BOOL mForce; }; -#endif // Q_QTOOLALIGN_H \ No newline at end of file +#endif // Q_QTOOLALIGN_H diff --git a/indra/newview/scriptcounter.h b/indra/newview/scriptcounter.h index 3e1f305fd..b1c737189 100644 --- a/indra/newview/scriptcounter.h +++ b/indra/newview/scriptcounter.h @@ -75,4 +75,4 @@ private: static bool doDelete; static std::stringstream sstr; static int countingDone; -}; \ No newline at end of file +}; diff --git a/indra/newview/wlfPanel_AdvSettings.cpp b/indra/newview/wlfPanel_AdvSettings.cpp index 757853c61..aef9e3276 100644 --- a/indra/newview/wlfPanel_AdvSettings.cpp +++ b/indra/newview/wlfPanel_AdvSettings.cpp @@ -178,4 +178,4 @@ void wlfPanel_AdvSettings::onChangePresetName(LLUICtrl* ctrl, void * userData) current_preset = combo_box->getSelectedValue().asString(); LLWaterParamManager::instance()->loadPreset(current_preset); } -} \ No newline at end of file +} From eeeb44755ae05992368e207e0366e00205e022d0 Mon Sep 17 00:00:00 2001 From: Siana Gearz Date: Tue, 10 May 2011 13:50:44 +0200 Subject: [PATCH 24/44] Make minimap not die on dead objects --- indra/newview/llviewerobjectlist.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 9fc072b59..5e62531d1 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -1092,9 +1092,9 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap) LLViewerObject* objectp = *iter; llassert_always(objectp); - llassert_always(!objectp->isDead()); - - if (!objectp->getRegion() || objectp->isOrphaned() || objectp->isAttachment()) + llassert(!objectp->isDead()); + + if (objectp->isDead() || !objectp->getRegion() || objectp->isOrphaned() || objectp->isAttachment()) { continue; } From b81cfb2c4f8c6e6bdac2637415e4cf632f4e2e62 Mon Sep 17 00:00:00 2001 From: Siana Gearz Date: Tue, 10 May 2011 14:51:27 +0200 Subject: [PATCH 25/44] Version 1.5.7(1) --- indra/llcommon/llversionviewer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index ba1183376..071f441e7 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -36,7 +36,7 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 5; const S32 LL_VERSION_PATCH = 7; -const S32 LL_VERSION_BUILD = 0; +const S32 LL_VERSION_BUILD = 1; const char * const LL_CHANNEL = "Singularity"; From b61b0ca932c596ca8bae0631f07ca7bda200fe8b Mon Sep 17 00:00:00 2001 From: Shyotl Date: Tue, 10 May 2011 13:51:38 -0500 Subject: [PATCH 26/44] ShowLookAt now depth-tested --- indra/newview/llhudeffectlookat.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp index 3e3b83eab..98814e882 100644 --- a/indra/newview/llhudeffectlookat.cpp +++ b/indra/newview/llhudeffectlookat.cpp @@ -509,6 +509,8 @@ void LLHUDEffectLookAt::render() (gAgent.getAvatarObject() == ((LLVOAvatar*)(LLViewerObject*)mSourceObject))) return; if (sDebugLookAt && mSourceObject.notNull()) { + LLGLDepthTest gls_depth(GL_TRUE,GL_FALSE); + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); LLVector3 target = mTargetPos + ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->mHeadp->getWorldPosition(); From 6b61e2dd2a70f5226df21699db8c07c3ffdeed5a Mon Sep 17 00:00:00 2001 From: Siana Gearz Date: Wed, 11 May 2011 12:47:24 +0200 Subject: [PATCH 27/44] Fix linkage in debug build on Windows --- indra/llcommon/llerror.h | 2 +- indra/llcommon/llthread.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h index f841637b3..60f3bfad1 100644 --- a/indra/llcommon/llerror.h +++ b/indra/llcommon/llerror.h @@ -303,7 +303,7 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG; */ #ifdef SHOW_ASSERT -extern bool is_main_thread(); +extern LL_COMMON_API bool is_main_thread(); #endif #endif // LL_LLERROR_H diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h index 2146216aa..fa003afdd 100644 --- a/indra/llcommon/llthread.h +++ b/indra/llcommon/llthread.h @@ -41,7 +41,7 @@ #include "aiaprpool.h" #ifdef SHOW_ASSERT -extern bool is_main_thread(void); +extern LL_COMMON_API bool is_main_thread(void); #endif class LLThread; From 29feeccf0da316c9b175454e0aab3fbf4119e79f Mon Sep 17 00:00:00 2001 From: Siana Gearz Date: Wed, 11 May 2011 23:06:19 +0200 Subject: [PATCH 28/44] Minimap fluke fix, thx Aleric --- indra/newview/llworld.cpp | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index e9e1ac086..0c445b65f 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -1386,26 +1386,17 @@ void send_agent_resume() LLAppViewer::instance()->resumeMainloopTimeout(); } -static LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3d& region_origin) -{ - LLVector3d pos_global; - LLVector3 pos_local; - U8 bits; - - bits = compact_local & 0xFF; - pos_local.mV[VZ] = F32(bits) * 4.f; - compact_local >>= 8; - - bits = compact_local & 0xFF; - pos_local.mV[VY] = (F32)bits; - compact_local >>= 8; - - bits = compact_local & 0xFF; - pos_local.mV[VX] = (F32)bits; - - pos_global.setVec( pos_local ); - pos_global += region_origin; - return pos_global; +static LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3d& region_origin) +{ + LLVector3d pos_global(region_origin); + LLVector3d pos_local; + + pos_local.mdV[VZ] = (compact_local & 0xFFU) * 4; + pos_local.mdV[VY] = (compact_local >> 8) & 0xFFU; + pos_local.mdV[VX] = (compact_local >> 16) & 0xFFU; + + pos_global += pos_local; + return pos_global; } void LLWorld::getAvatars(std::vector* avatar_ids, std::vector* positions, const LLVector3d& relative_to, F32 radius) const From b3847fdeed5158bf3d8bfa344b821662b668a2bf Mon Sep 17 00:00:00 2001 From: Siana Gearz Date: Wed, 11 May 2011 23:06:49 +0200 Subject: [PATCH 29/44] Build fixes --- indra/llplugin/CMakeLists.txt | 4 ++-- indra/media_plugins/base/CMakeLists.txt | 4 ++-- indra/newview/CMakeLists.txt | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt index c60ca2e5b..63a7ad75b 100644 --- a/indra/llplugin/CMakeLists.txt +++ b/indra/llplugin/CMakeLists.txt @@ -52,13 +52,13 @@ set(llplugin_HEADER_FILES set_source_files_properties(${llplugin_HEADER_FILES} PROPERTIES HEADER_FILE_ONLY TRUE) -if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4) +if(NOT WORD_SIZE EQUAL 32) if(WINDOWS) add_definitions(/FIXED:NO) else(WINDOWS) # not windows therefore gcc LINUX and DARWIN add_definitions(-fPIC) endif(WINDOWS) -endif (NOT CMAKE_SIZEOF_VOID_P MATCHES 4) +endif (NOT WORD_SIZE EQUAL 32) list(APPEND llplugin_SOURCE_FILES ${llplugin_HEADER_FILES}) diff --git a/indra/media_plugins/base/CMakeLists.txt b/indra/media_plugins/base/CMakeLists.txt index 817c842bf..fc6f8e9cf 100644 --- a/indra/media_plugins/base/CMakeLists.txt +++ b/indra/media_plugins/base/CMakeLists.txt @@ -25,13 +25,13 @@ include_directories( ### media_plugin_base -if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4) +if(NOT WORD_SIZE EQUAL 32) if(WINDOWS) add_definitions(/FIXED:NO) else(WINDOWS) # not windows therefore gcc LINUX and DARWIN add_definitions(-fPIC) endif(WINDOWS) -endif (NOT CMAKE_SIZEOF_VOID_P MATCHES 4) +endif (NOT WORD_SIZE EQUAL 32) set(media_plugin_base_SOURCE_FILES media_plugin_base.cpp diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 57a6163d7..7071fbc4b 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1330,11 +1330,11 @@ set(PACKAGE ${PACKAGE_DEFAULT} CACHE BOOL "Add a package target that builds an installer package.") if (WINDOWS) - if(MSVC71) - set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map /MAPINFO:LINES") - else(MSVC71) + if(MSVC10) + set(release_flags "/MAPRelease/${VIEWER_BINARY_NAME}.map") + else() set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map") - endif(MSVC71) + endif() set_target_properties(${VIEWER_BINARY_NAME} PROPERTIES From 981e4f39b227c38c05f7c4500ebf7b7b14d1201d Mon Sep 17 00:00:00 2001 From: narv Date: Thu, 12 May 2011 07:41:49 -0700 Subject: [PATCH 30/44] Revert to build llcommon on Darwin --- indra/llcommon/CMakeLists.txt | 9 +++++++++ indra/newview/viewer_manifest.py | 2 ++ 2 files changed, 11 insertions(+) diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 7f352269b..29fa35619 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -216,3 +216,12 @@ target_link_libraries( ${WINDOWS_LIBRARIES} ) +if (DARWIN) + # Don't embed a full path in the library's install name + set_target_properties( + llcommon + PROPERTIES + BUILD_WITH_INSTALL_RPATH 1 + INSTALL_NAME_DIR "@executable_path/../Resources" + ) +endif (DARWIN) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 8c2b42f5e..0bead92ab 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -495,6 +495,8 @@ class DarwinManifest(ViewerManifest): self.path("vivox-runtime/universal-darwin/libortp.dylib", "libortp.dylib") self.path("vivox-runtime/universal-darwin/libvivoxsdk.dylib", "libvivoxsdk.dylib") self.path("vivox-runtime/universal-darwin/SLVoice", "SLVoice") + + self.path("../llcommon/" + self.args['configuration'] + "/libllcommon.dylib", "libllcommon.dylib") libfile = "lib%s.dylib" libdir = "../../libraries/universal-darwin/lib_release" From ebe705352684758b6807d3ac493a7a7f07e97244 Mon Sep 17 00:00:00 2001 From: narv Date: Thu, 12 May 2011 07:45:13 -0700 Subject: [PATCH 31/44] Version 1.5.7(2) --- indra/llcommon/llversionviewer.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 071f441e7..0ab6c5d3d 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -36,12 +36,12 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 5; const S32 LL_VERSION_PATCH = 7; -const S32 LL_VERSION_BUILD = 1; +const S32 LL_VERSION_BUILD = 2; const char * const LL_CHANNEL = "Singularity"; #if LL_DARWIN -const char * const LL_VERSION_BUNDLE_ID = "com.secondlife.snowglobe.viewer"; +const char * const LL_VERSION_BUNDLE_ID = "com.secondlife.singularity.viewer"; #endif #endif From 4d9e7fa8c158a256f816f22b8223cf739d1f87f2 Mon Sep 17 00:00:00 2001 From: Siana Gearz Date: Thu, 12 May 2011 22:10:10 +0200 Subject: [PATCH 32/44] Deferred settings --- indra/newview/llpaneldisplay.cpp | 46 ++++++++++--- indra/newview/llpaneldisplay.h | 7 +- .../xui/en-us/panel_preferences_graphics1.xml | 65 ++++++++++++++----- 3 files changed, 92 insertions(+), 26 deletions(-) diff --git a/indra/newview/llpaneldisplay.cpp b/indra/newview/llpaneldisplay.cpp index 273e68fdb..77ee2e2c7 100644 --- a/indra/newview/llpaneldisplay.cpp +++ b/indra/newview/llpaneldisplay.cpp @@ -233,13 +233,21 @@ BOOL LLPanelDisplay::postBuild() mCtrlReflections = getChild("Reflections"); mCtrlReflections->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); mCtrlReflections->setCallbackUserData(this); - mRadioReflectionDetail = getChild("ReflectionDetailRadio"); + mCtrlReflectionDetail = getChild("ReflectionDetailCombo"); // WindLight mCtrlWindLight = getChild("WindLightUseAtmosShaders"); mCtrlWindLight->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); mCtrlWindLight->setCallbackUserData(this); + // Deferred + mCtrlDeferred = getChild("RenderDeferred"); + mCtrlDeferred->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); + mCtrlDeferred->setCallbackUserData(this); + mCtrlSunShadow = getChild("RenderDeferredSunShadow"); + mCtrlSunShadow->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); + mCtrlSunShadow->setCallbackUserData(this); + //---------------------------------------------------------------------------- // Enable Avatar Shaders mCtrlAvatarVP = getChild("AvatarVertexProgram"); @@ -391,6 +399,8 @@ void LLPanelDisplay::refresh() mWindLight = gSavedSettings.getBOOL("WindLightUseAtmosShaders"); mReflections = gSavedSettings.getBOOL("RenderWaterReflections"); mAvatarVP = gSavedSettings.getBOOL("RenderAvatarVP"); + mDeferred = gSavedSettings.getBOOL("RenderDeferred"); + mSunShadow = gSavedSettings.getBOOL("RenderDeferredSunShadow"); // reflection radio mReflectionDetail = gSavedSettings.getS32("RenderReflectionDetail"); @@ -464,10 +474,7 @@ void LLPanelDisplay::refreshEnabledState() bool bumpshiny = gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps && LLFeatureManager::getInstance()->isFeatureAvailable("RenderObjectBump"); mCtrlBumpShiny->setEnabled(bumpshiny ? TRUE : FALSE); - for (S32 i = 0; i < mRadioReflectionDetail->getItemCount(); ++i) - { - mRadioReflectionDetail->setIndexEnabled(i, mCtrlReflections->get() && reflections); - } + mCtrlReflectionDetail->setEnabled(mCtrlReflections->get() && reflections); // Avatar Mode S32 max_avatar_shader = LLViewerShaderMgr::instance()->mMaxAvatarShaderLevel; @@ -483,6 +490,10 @@ void LLPanelDisplay::refreshEnabledState() mCtrlAvatarCloth->setEnabled(true); } + BOOL can_defer = gSavedSettings.getBOOL("RenderUseFBO"); + mCtrlDeferred->setEnabled(can_defer); + mCtrlSunShadow->setEnabled(can_defer && gSavedSettings.getBOOL("RenderDeferred")); + // Vertex Shaders // mCtrlShaderEnable->setEnabled(LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable")); // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0a @@ -538,6 +549,11 @@ void LLPanelDisplay::disableUnavailableSettings() mCtrlAvatarCloth->setEnabled(FALSE); mCtrlAvatarCloth->setValue(FALSE); + + mCtrlDeferred->setEnabled(FALSE); + mCtrlDeferred->setValue(FALSE); + mCtrlSunShadow->setEnabled(FALSE); + mCtrlSunShadow->setValue(FALSE); } // disabled windlight @@ -575,6 +591,15 @@ void LLPanelDisplay::disableUnavailableSettings() mCtrlAvatarImpostors->setEnabled(FALSE); mCtrlAvatarImpostors->setValue(FALSE); } + // disabled deferred + if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred")) + { + mCtrlDeferred->setEnabled(FALSE); + mCtrlDeferred->setValue(FALSE); + mCtrlSunShadow->setEnabled(FALSE); + mCtrlSunShadow->setValue(FALSE); + } + } void LLPanelDisplay::setHiddenGraphicsState(bool isHidden) @@ -610,7 +635,7 @@ void LLPanelDisplay::setHiddenGraphicsState(bool isHidden) llassert(mRadioLightingDetail2 != NULL); llassert(mRadioTerrainDetail != NULL); - llassert(mRadioReflectionDetail != NULL); + llassert(mCtrlReflectionDetail != NULL); llassert(mMeshDetailText != NULL); llassert(mShaderText != NULL); @@ -633,7 +658,7 @@ void LLPanelDisplay::setHiddenGraphicsState(bool isHidden) mCtrlLODFactor->setVisible(!isHidden); mCtrlFlexFactor->setVisible(!isHidden); mCtrlTreeFactor->setVisible(!isHidden); - mCtrlAvatarFactor->setVisible(!isHidden); + mCtrlAvatarFactor->setVisible(!isHidden); mCtrlTerrainFactor->setVisible(!isHidden); mCtrlSkyFactor->setVisible(!isHidden); mCtrlMaxParticle->setVisible(!isHidden); @@ -657,7 +682,10 @@ void LLPanelDisplay::setHiddenGraphicsState(bool isHidden) mRadioLightingDetail2->setVisible(!isHidden); mRadioTerrainDetail->setVisible(!isHidden); - mRadioReflectionDetail->setVisible(!isHidden); + mCtrlReflectionDetail->setVisible(!isHidden); + + mCtrlDeferred->setVisible(!isHidden); + mCtrlSunShadow->setVisible(!isHidden); // text boxes mShaderText->setVisible(!isHidden); @@ -691,6 +719,8 @@ void LLPanelDisplay::cancel() gSavedSettings.setBOOL("WindLightUseAtmosShaders", mWindLight); gSavedSettings.setBOOL("RenderWaterReflections", mReflections); gSavedSettings.setBOOL("RenderAvatarVP", mAvatarVP); + gSavedSettings.setBOOL("RenderDeferred", mDeferred); + gSavedSettings.setBOOL("RenderDeferredSunShadow", mSunShadow); gSavedSettings.setS32("RenderReflectionDetail", mReflectionDetail); diff --git a/indra/newview/llpaneldisplay.h b/indra/newview/llpaneldisplay.h index 1aedee499..677f1086c 100644 --- a/indra/newview/llpaneldisplay.h +++ b/indra/newview/llpaneldisplay.h @@ -84,6 +84,7 @@ protected: LLComboBox *mCtrlFullScreen; // Fullscreen resolution LLCheckBoxCtrl *mCtrlAutoDetectAspect; // automatically detect aspect ratio LLComboBox *mCtrlAspectRatio; // user provided aspect ratio + LLComboBox *mCtrlReflectionDetail; LLCheckBoxCtrl *mCtrlWindowed; // windowed mode LLComboBox *mCtrlWindowSize; // window size for windowed mode @@ -110,12 +111,12 @@ protected: LLCheckBoxCtrl *mCtrlWindLight; LLCheckBoxCtrl *mCtrlAvatarVP; LLCheckBoxCtrl *mCtrlShaderEnable; + LLCheckBoxCtrl *mCtrlDeferred; + LLCheckBoxCtrl *mCtrlSunShadow; LLCheckBoxCtrl *mCtrlAvatarImpostors; LLCheckBoxCtrl *mCtrlAvatarCloth; LLRadioGroup *mRadioLightingDetail2; - LLRadioGroup *mRadioTerrainDetail; - LLRadioGroup *mRadioReflectionDetail; LLTextBox *mAspectRatioLabel1; LLTextBox *mDisplayResLabel; @@ -151,6 +152,8 @@ protected: BOOL mShaderEnable; BOOL mWindLight; BOOL mReflections; + BOOL mDeferred; + BOOL mSunShadow; BOOL mAvatarVP; S32 mReflectionDetail; diff --git a/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml index e04fd72d1..cfca131fe 100644 --- a/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml @@ -1,6 +1,6 @@ -