Automated merge with ssh://bitbucket.org/lindenlab/viewer64

meow-7.2.2
Nat Goodspeed 2017-05-03 22:56:07 -04:00
commit 35cec8fec8
2 changed files with 46 additions and 7 deletions

View File

@ -27,6 +27,30 @@
#define LLSAFEHANDLE_H
#include "llerror.h" // *TODO: consider eliminating this
#include "llsingleton.h"
/*==========================================================================*|
____ ___ _ _ ___ _____ _ _ ____ _____ _
| _ \ / _ \ | \ | |/ _ \_ _| | | | / ___|| ____| |
| | | | | | | | \| | | | || | | | | \___ \| _| | |
| |_| | |_| | | |\ | |_| || | | |_| |___) | |___|_|
|____/ \___/ |_| \_|\___/ |_| \___/|____/|_____(_)
This handle class is deprecated. Unfortunately it is already in widespread use
to reference the LLObjectSelection and LLParcelSelection classes, but do not
apply LLSafeHandle to other classes, or declare new instances.
Instead, use LLPointer or other smart pointer types with appropriate checks
for NULL. If you're certain the reference cannot (or must not) be NULL,
consider storing a C++ reference instead -- or use (e.g.) LLCheckedHandle.
When an LLSafeHandle<T> containing NULL is dereferenced, it resolves to a
canonical "null" T instance. This raises issues about the lifespan of the
"null" instance. In addition to encouraging sloppy coding practices, it
potentially masks bugs when code that performs some mutating operation
inadvertently applies it to the "null" instance. That result might or might
not ever affect subsequent computations.
|*==========================================================================*/
// Expands LLPointer to return a pointer to a special instance of class Type instead of NULL.
// This is useful in instances where operations on NULL pointers are semantically safe and/or
@ -146,15 +170,25 @@ protected:
}
}
// Define an LLSingleton whose sole purpose is to hold a "null instance"
// of the subject Type: the canonical instance to dereference if this
// LLSafeHandle actually holds a null pointer. We use LLSingleton
// specifically so that the "null instance" can be cleaned up at a well-
// defined time, specifically LLSingletonBase::deleteAll().
// Of course, as with any LLSingleton, the "null instance" is only
// instantiated on demand -- in this case, if you actually try to
// dereference an LLSafeHandle containing null.
class NullInstanceHolder: public LLSingleton<NullInstanceHolder>
{
LLSINGLETON_EMPTY_CTOR(NullInstanceHolder);
~NullInstanceHolder() {}
public:
Type mNullInstance;
};
static Type* nonNull(Type* ptr)
{
return ptr == NULL ? sNullFunc() : ptr;
}
static Type* sNullFunc()
{
static Type sInstance;
return &sInstance;
return ptr? ptr : &NullInstanceHolder::instance().mNullInstance;
}
protected:

View File

@ -3111,7 +3111,12 @@ void LLAppViewer::initUpdater()
mUpdater->setAppExitCallback(boost::bind(&LLAppViewer::forceQuit, this));
mUpdater->initialize(channel,
version,
// DRTVWR-418 transitional: query using "win64" until VMP is in place
#if LL_WINDOWS && (ADDRESS_SIZE == 64)
"win64",
#else
gPlatform,
#endif
getOSInfo().getOSVersionString(),
unique_id,
willing_to_test