summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorskolb <none@none>2009-10-15 13:58:16 -0700
committerskolb <none@none>2009-10-15 13:58:16 -0700
commite9f7205ba9f4dfb3422759218609b62d61972722 (patch)
treee7859943f67b0ab2f8e132cd64c0effbb3462206 /indra/newview
parent1b1550f284316b244a10a4a6604fedb5d6b18965 (diff)
parent050ae3cf5107140a58f6aeae865d254b74a23d44 (diff)
Merge fix for DEV-39832
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/English.lproj/InfoPlist.strings4
-rw-r--r--indra/newview/Info-SecondLife.plist2
-rw-r--r--indra/newview/app_settings/settings.xml2
-rw-r--r--indra/newview/llmediadataclient.cpp24
-rw-r--r--indra/newview/llviewermedia.cpp3
-rw-r--r--indra/newview/llviewermediafocus.cpp5
-rw-r--r--indra/newview/res/viewerRes.rc8
-rw-r--r--indra/newview/tests/llmediadataclient_test.cpp68
-rwxr-xr-xindra/newview/viewer_manifest.py2
9 files changed, 78 insertions, 40 deletions
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
index afa5a877b5..dceaba9a43 100644
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -2,6 +2,6 @@
CFBundleName = "Second Life";
-CFBundleShortVersionString = "Second Life version 2.0.0.2822";
-CFBundleGetInfoString = "Second Life version 2.0.0.2822, Copyright 2004-2009 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version 2.0.0.3256";
+CFBundleGetInfoString = "Second Life version 2.0.0.3256, Copyright 2004-2009 Linden Research, Inc.";
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
index 1df5102f5f..7aec8a343d 100644
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
- <string>2.0.0.2822</string>
+ <string>2.0.0.3256</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index ecad5dfe41..f1e5acdd74 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -9981,7 +9981,7 @@
<key>Comment</key>
<string>Versioning Channel Name.</string>
<key>Persist</key>
- <integer>1</integer>
+ <integer>0</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp
index 3a1b47554c..f797f15865 100644
--- a/indra/newview/llmediadataclient.cpp
+++ b/indra/newview/llmediadataclient.cpp
@@ -182,15 +182,20 @@ LLMediaDataClient::Responder::RetryTimer::RetryTimer(F32 time, Responder *mdr)
LLMediaDataClient::Responder::RetryTimer::~RetryTimer()
{
LL_DEBUGS("LLMediaDataClient") << "~RetryTimer" << *(mResponder->getRequest()) << LL_ENDL;
+
+ // XXX This is weird: Instead of doing the work in tick() (which re-schedules
+ // a timer, which might be risky), do it here, in the destructor. Yes, it is very odd.
+ // Instead of retrying, we just put the request back onto the queue
+ LL_INFOS("LLMediaDataClient") << "RetryTimer fired for: " << *(mResponder->getRequest()) << "retrying" << LL_ENDL;
+ mResponder->getRequest()->reEnqueue();
+
+ // Release the ref to the responder.
mResponder = NULL;
}
// virtual
BOOL LLMediaDataClient::Responder::RetryTimer::tick()
{
- // Instead of retrying, we just put the request back onto the queue
- LL_INFOS("LLMediaDataClient") << "RetryTimer fired for: " << *(mResponder->getRequest()) << "retrying" << LL_ENDL;
- mResponder->getRequest()->reEnqueue();
// Don't fire again
return TRUE;
}
@@ -357,7 +362,7 @@ BOOL LLMediaDataClient::QueueTimer::tick()
return TRUE;
}
- LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() started, queue is: " << queue << LL_ENDL;
+ LL_INFOS("LLMediaDataClient") << "QueueTimer::tick() started, queue is: " << queue << LL_ENDL;
// Peel one off of the items from the queue, and execute request
request_ptr_t request = queue.top();
@@ -382,9 +387,13 @@ BOOL LLMediaDataClient::QueueTimer::tick()
}
}
else {
- if (!object->hasMedia())
+ if (NULL == object)
{
- LL_INFOS("LLMediaDataClient") << "Not Sending request for " << *request << " hasMedia() is false!" << LL_ENDL;
+ LL_WARNS("LLMediaDataClient") << "Not Sending request for " << *request << " NULL object!" << LL_ENDL;
+ }
+ else if (!object->hasMedia())
+ {
+ LL_WARNS("LLMediaDataClient") << "Not Sending request for " << *request << " hasMedia() is false!" << LL_ENDL;
}
}
bool exceeded_retries = request->getRetryCount() > mMDC->mMaxNumRetries;
@@ -414,6 +423,9 @@ void LLMediaDataClient::startQueueTimer()
// LLEventTimer automagically takes care of the lifetime of this object
new QueueTimer(mQueueTimerDelay, this);
}
+ else {
+ LL_DEBUGS("LLMediaDataClient") << "not starting queue timer (it's already running, right???)" << LL_ENDL;
+ }
}
void LLMediaDataClient::stopQueueTimer()
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 3a503f22a0..6a40c76757 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -1017,6 +1017,9 @@ void LLViewerMediaImpl::navigateHome()
//////////////////////////////////////////////////////////////////////////////////////////
void LLViewerMediaImpl::navigateTo(const std::string& url, const std::string& mime_type, bool rediscover_type, bool server_request)
{
+ // Helpful to have media urls in log file. Shouldn't be spammy.
+ llinfos << "url=" << url << " mime_type=" << mime_type << llendl;
+
if(server_request)
{
setNavState(MEDIANAVSTATE_SERVER_SENT);
diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp
index 1b1b7cedb1..db31714f16 100644
--- a/indra/newview/llviewermediafocus.cpp
+++ b/indra/newview/llviewermediafocus.cpp
@@ -290,6 +290,11 @@ BOOL LLViewerMediaFocus::handleKey(KEY key, MASK mask, BOOL called_from_parent)
{
if(mMediaImpl.notNull())
mMediaImpl->handleKeyHere(key, mask);
+
+ if (key == KEY_ESCAPE && mMediaHUD.get())
+ {
+ mMediaHUD.get()->close();
+ }
return true;
}
diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc
index 63b76d4f5d..433070ce34 100644
--- a/indra/newview/res/viewerRes.rc
+++ b/indra/newview/res/viewerRes.rc
@@ -134,8 +134,8 @@ TOOLMEDIAOPEN CURSOR "toolmediaopen.cur"
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,0,0,2822
- PRODUCTVERSION 2,0,0,2822
+ FILEVERSION 2,0,0,3256
+ PRODUCTVERSION 2,0,0,3256
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -152,12 +152,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Linden Lab"
VALUE "FileDescription", "Second Life"
- VALUE "FileVersion", "2.0.0.2822"
+ VALUE "FileVersion", "2.0.0.3256"
VALUE "InternalName", "Second Life"
VALUE "LegalCopyright", "Copyright © 2001-2008, Linden Research, Inc."
VALUE "OriginalFilename", "SecondLife.exe"
VALUE "ProductName", "Second Life"
- VALUE "ProductVersion", "2.0.0.2822"
+ VALUE "ProductVersion", "2.0.0.3256"
END
END
BLOCK "VarFileInfo"
diff --git a/indra/newview/tests/llmediadataclient_test.cpp b/indra/newview/tests/llmediadataclient_test.cpp
index a884ed0265..445ec7aa34 100644
--- a/indra/newview/tests/llmediadataclient_test.cpp
+++ b/indra/newview/tests/llmediadataclient_test.cpp
@@ -29,6 +29,8 @@
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
+
+#include "linden_common.h"
#include "../llviewerprecompiledheaders.h"
#include <iostream>
@@ -46,7 +48,14 @@
#include "../../llprimitive/lltextureentry.cpp"
#include "../../llmessage/tests/llcurl_stub.cpp"
+#if LL_WINDOWS
+#pragma warning (push)
+#pragma warning (disable : 4702) // boost::lexical_cast generates this warning
+#endif
#include <boost/lexical_cast.hpp>
+#if LL_WINDOWS
+#pragma warning (pop)
+#endif
#define VALID_OBJECT_ID "3607d5c4-644b-4a8a-871a-8b78471af2a2"
#define VALID_OBJECT_ID_1 "11111111-1111-1111-1111-111111111111"
@@ -186,6 +195,15 @@ private:
int mNumBounceBacks;
};
+// This special timer delay should ensure that the timer will fire on the very
+// next pump, no matter what (though this does make an assumption about the
+// implementation of LLEventTimer::updateClass()):
+const F32 NO_PERIOD = -1000.0f;
+
+static void pump_timers()
+{
+ LLEventTimer::updateClass();
+}
namespace tut
{
@@ -194,9 +212,9 @@ namespace tut
mediadataclient() {
gPostRecords = &mLLSD;
-// LLError::setDefaultLevel(LLError::LEVEL_DEBUG);
-// LLError::setClassLevel("LLMediaDataClient", LLError::LEVEL_DEBUG);
-// LLError::setTagLevel("MediaOnAPrim", LLError::LEVEL_DEBUG);
+ //LLError::setDefaultLevel(LLError::LEVEL_DEBUG);
+ //LLError::setClassLevel("LLMediaDataClient", LLError::LEVEL_DEBUG);
+ //LLError::setTagLevel("MediaOnAPrim", LLError::LEVEL_DEBUG);
}
LLSD mLLSD;
};
@@ -256,14 +274,13 @@ namespace tut
LLMediaDataClientObject::ptr_t o = new LLMediaDataClientObjectTest(DATA);
int num_refs_start = o->getNumRefs();
{
- // queue time w/ no delay ensures that LLEventTimer::updateClass() will hit the tick()
- LLPointer<LLObjectMediaDataClient> mdc = new LLObjectMediaDataClient(0,0,4);
+ LLPointer<LLObjectMediaDataClient> mdc = new LLObjectMediaDataClient(NO_PERIOD,NO_PERIOD);
mdc->fetchMedia(o);
// Make sure no posts happened yet...
ensure("post records", gPostRecords->size(), 0);
- LLEventTimer::updateClass();
+ ::pump_timers();
ensure("post records", gPostRecords->size(), 1);
ensure("post url", (*gPostRecords)[0]["url"], FAKE_OBJECT_MEDIA_CAP_URL);
@@ -288,11 +305,11 @@ namespace tut
LLMediaDataClientObject::ptr_t o = new LLMediaDataClientObjectTest(DATA);
{
- // queue time w/ no delay ensures that LLEventTimer::updateClass() will hit the tick()
- LLPointer<LLObjectMediaDataClient> mdc = new LLObjectMediaDataClient(0,0,4);
+ // queue time w/ no delay ensures that ::pump_timers() will hit the tick()
+ LLPointer<LLObjectMediaDataClient> mdc = new LLObjectMediaDataClient(NO_PERIOD,NO_PERIOD);
mdc->updateMedia(o);
ensure("post records", gPostRecords->size(), 0);
- LLEventTimer::updateClass();
+ ::pump_timers();
ensure("post records", gPostRecords->size(), 1);
ensure("post url", (*gPostRecords)[0]["url"], FAKE_OBJECT_MEDIA_CAP_URL);
@@ -318,11 +335,11 @@ namespace tut
LLMediaDataClientObject::ptr_t o = new LLMediaDataClientObjectTest(DATA);
{
- LLPointer<LLObjectMediaNavigateClient> mdc = new LLObjectMediaNavigateClient(0,0,4);
+ LLPointer<LLObjectMediaNavigateClient> mdc = new LLObjectMediaNavigateClient(NO_PERIOD,NO_PERIOD);
const char *TEST_URL = "http://example.com";
mdc->navigate(o, 0, TEST_URL);
ensure("post records", gPostRecords->size(), 0);
- LLEventTimer::updateClass();
+ ::pump_timers();
// ensure no bounce back
ensure("bounce back", dynamic_cast<LLMediaDataClientObjectTest*>(static_cast<LLMediaDataClientObject*>(o))->getNumBounceBacks(), 0);
@@ -354,7 +371,7 @@ namespace tut
LLMediaDataClientObject::ptr_t o3 = new LLMediaDataClientObjectTest(
_DATA(VALID_OBJECT_ID_3,"2.0","1.0"));
{
- LLPointer<LLObjectMediaDataClient> mdc = new LLObjectMediaDataClient(0,0,4);
+ LLPointer<LLObjectMediaDataClient> mdc = new LLObjectMediaDataClient(NO_PERIOD,NO_PERIOD);
const char *ORDERED_OBJECT_IDS[] = { VALID_OBJECT_ID_2, VALID_OBJECT_ID_3, VALID_OBJECT_ID_1 };
mdc->fetchMedia(o1);
mdc->fetchMedia(o2);
@@ -364,11 +381,11 @@ namespace tut
ensure("post records", gPostRecords->size(), 0);
// tick 3 times...
- LLEventTimer::updateClass();
+ ::pump_timers();
ensure("post records", gPostRecords->size(), 1);
- LLEventTimer::updateClass();
+ ::pump_timers();
ensure("post records", gPostRecords->size(), 2);
- LLEventTimer::updateClass();
+ ::pump_timers();
ensure("post records", gPostRecords->size(), 3);
for( int i=0; i < 3; i++ )
@@ -405,7 +422,7 @@ namespace tut
int num_refs_start = o->getNumRefs();
{
const int NUM_RETRIES = 5;
- LLPointer<LLObjectMediaDataClient> mdc = new LLObjectMediaDataClient(0,0,NUM_RETRIES);
+ LLPointer<LLObjectMediaDataClient> mdc = new LLObjectMediaDataClient(NO_PERIOD,NO_PERIOD,NUM_RETRIES);
// This should generate a retry
mdc->fetchMedia(o);
@@ -418,15 +435,16 @@ namespace tut
// Third, fires queue timer again
for (int i=0; i<NUM_RETRIES; ++i)
{
- LLEventTimer::updateClass();
- ensure("post records " + STR(i), gPostRecords->size(), i+1);
- LLEventTimer::updateClass();
+ ::pump_timers(); // Should pump (fire) the queue timer, causing a retry timer to be scheduled
+ // XXX This ensure is not guaranteed, because scheduling a timer might actually get it pumped in the same loop
+ //ensure("post records " + STR(i), gPostRecords->size(), i+1);
+ ::pump_timers(); // Should pump (fire) the retry timer, scheduling the queue timer
}
- // Do some extre pumps to make sure no other timer work occurs.
- LLEventTimer::updateClass();
- LLEventTimer::updateClass();
- LLEventTimer::updateClass();
+ // Do some extra pumps to make sure no other timer work occurs.
+ ::pump_timers();
+ ::pump_timers();
+ ::pump_timers();
// Make sure there were 2 posts
ensure("post records after", gPostRecords->size(), NUM_RETRIES);
@@ -458,11 +476,11 @@ namespace tut
FAKE_OBJECT_MEDIA_CAP_URL,
FAKE_OBJECT_MEDIA_NAVIGATE_CAP_URL_ERROR));
{
- LLPointer<LLObjectMediaNavigateClient> mdc = new LLObjectMediaNavigateClient(0,0,4);
+ LLPointer<LLObjectMediaNavigateClient> mdc = new LLObjectMediaNavigateClient(NO_PERIOD,NO_PERIOD);
const char *TEST_URL = "http://example.com";
mdc->navigate(o, 0, TEST_URL);
ensure("post records", gPostRecords->size(), 0);
- LLEventTimer::updateClass();
+ ::pump_timers();
// ensure bounce back
ensure("bounce back",
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 41aa13614e..f2e89ef062 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -626,7 +626,7 @@ class DarwinManifest(ViewerManifest):
# make sure we don't have stale files laying about
self.remove(sparsename, finalname)
- self.run_command('hdiutil create "%(sparse)s" -volname "%(vol)s" -fs HFS+ -type SPARSE -megabytes 500 -layout SPUD' % {
+ self.run_command('hdiutil create "%(sparse)s" -volname "%(vol)s" -fs HFS+ -type SPARSE -megabytes 700 -layout SPUD' % {
'sparse':sparsename,
'vol':volname})