diff options
| author | Nat Goodspeed <nat@lindenlab.com> | 2010-12-14 19:28:29 -0500 | 
|---|---|---|
| committer | Nat Goodspeed <nat@lindenlab.com> | 2010-12-14 19:28:29 -0500 | 
| commit | d785a43ea2c941f963c413ecfba927877163f5b9 (patch) | |
| tree | 81d0ccff933213768b08b1858e1c9e56071d6195 | |
| parent | 3641d012e3300244eaf2afbeab1a2cd5ca7a3785 (diff) | |
| parent | e04f9ef1093287155f1d0820bd63c4b3c6c5d3d2 (diff) | |
Automated merge with https://bitbucket.org/mani_linden/viewer-development
| -rw-r--r-- | indra/llcommon/llapr.cpp | 22 | ||||
| -rw-r--r-- | indra/llcommon/llapr.h | 5 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 33 | 
3 files changed, 56 insertions, 4 deletions
| diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp index 66ec5bad2c..d1c44c9403 100644 --- a/indra/llcommon/llapr.cpp +++ b/indra/llcommon/llapr.cpp @@ -28,6 +28,7 @@  #include "linden_common.h"  #include "llapr.h" +#include "apr_dso.h"  apr_pool_t *gAPRPoolp = NULL; // Global APR memory pool  LLVolatileAPRPool *LLAPRFile::sAPRFilePoolp = NULL ; //global volatile APR memory pool. @@ -279,14 +280,31 @@ bool ll_apr_warn_status(apr_status_t status)  {  	if(APR_SUCCESS == status) return false;  	char buf[MAX_STRING];	/* Flawfinder: ignore */ -	apr_strerror(status, buf, MAX_STRING); +	apr_strerror(status, buf, sizeof(buf));  	LL_WARNS("APR") << "APR: " << buf << LL_ENDL;  	return true;  } +bool ll_apr_warn_status(apr_status_t status, apr_dso_handle_t *handle) +{ +    bool result = ll_apr_warn_status(status); +    // Despite observed truncation of actual Mac dylib load errors, increasing +    // this buffer to more than MAX_STRING doesn't help: it appears that APR +    // stores the output in a fixed 255-character internal buffer. (*sigh*) +    char buf[MAX_STRING];           /* Flawfinder: ignore */ +    apr_dso_error(handle, buf, sizeof(buf)); +    LL_WARNS("APR") << "APR: " << buf << LL_ENDL; +    return result; +} +  void ll_apr_assert_status(apr_status_t status)  { -	llassert(ll_apr_warn_status(status) == false); +	llassert(! ll_apr_warn_status(status)); +} + +void ll_apr_assert_status(apr_status_t status, apr_dso_handle_t *handle) +{ +    llassert(! ll_apr_warn_status(status, handle));  }  //--------------------------------------------------------------------- diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h index 4930270af8..af33ce666f 100644 --- a/indra/llcommon/llapr.h +++ b/indra/llcommon/llapr.h @@ -53,6 +53,8 @@  extern LL_COMMON_API apr_thread_mutex_t* gLogMutexp;  extern apr_thread_mutex_t* gCallStacksLogMutexp; +struct apr_dso_handle_t; +  /**    * @brief initialize the common apr constructs -- apr itself, the   * global pool, and a mutex. @@ -259,8 +261,11 @@ public:   * @return Returns <code>true</code> if status is an error condition.   */  bool LL_COMMON_API ll_apr_warn_status(apr_status_t status); +/// There's a whole other APR error-message function if you pass a DSO handle. +bool LL_COMMON_API ll_apr_warn_status(apr_status_t status, apr_dso_handle_t* handle);  void LL_COMMON_API ll_apr_assert_status(apr_status_t status); +void LL_COMMON_API ll_apr_assert_status(apr_status_t status, apr_dso_handle_t* handle);  extern "C" LL_COMMON_API apr_pool_t* gAPRPoolp; // Global APR memory pool diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index eb8d87e184..a6953a47f0 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -4622,6 +4622,35 @@ void LLAppViewer::loadEventHostModule(S32 listen_port)  		return;  	} +	LL_INFOS("eventhost") << "Found lleventhost at '" << dso_path << "'" << LL_ENDL; +#if ! defined(LL_WINDOWS) +	{ +		std::string outfile("/tmp/lleventhost.file.out"); +		std::string command("file '" + dso_path + "' > '" + outfile + "' 2>&1"); +		int rc = system(command.c_str()); +		if (rc != 0) +		{ +			LL_WARNS("eventhost") << command << " ==> " << rc << ':' << LL_ENDL; +		} +		else +		{ +			LL_INFOS("eventhost") << command << ':' << LL_ENDL; +		} +		{ +			std::ifstream reader(outfile.c_str()); +			std::string line; +			while (std::getline(reader, line)) +			{ +				size_t len = line.length(); +				if (len && line[len-1] == '\n') +					line.erase(len-1); +				LL_INFOS("eventhost") << line << LL_ENDL; +			} +		} +		remove(outfile.c_str()); +	} +#endif // LL_WINDOWS +  	apr_dso_handle_t * eventhost_dso_handle = NULL;  	apr_pool_t * eventhost_dso_memory_pool = NULL; @@ -4630,13 +4659,13 @@ void LLAppViewer::loadEventHostModule(S32 listen_port)  	apr_status_t rv = apr_dso_load(&eventhost_dso_handle,  		dso_path.c_str(),  		eventhost_dso_memory_pool); -	ll_apr_assert_status(rv); +	llassert_always(! ll_apr_warn_status(rv, eventhost_dso_handle));  	llassert_always(eventhost_dso_handle != NULL);  	int (*ll_plugin_start_func)(LLSD const &) = NULL;  	rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll_plugin_start_func, eventhost_dso_handle, "ll_plugin_start"); -	ll_apr_assert_status(rv); +	llassert_always(! ll_apr_warn_status(rv, eventhost_dso_handle));  	llassert_always(ll_plugin_start_func != NULL);  	LLSD args; | 
