Commit Graph

339 Commits

Author SHA1 Message Date
Aleric Inglewood
96d302aa42 Be more verbose about internal (curl / timeout) errors.
Translates the CURLE_WRITE_ERROR into what it really means: that the low
speed check failed.
2013-03-09 05:26:52 +01:00
Aleric Inglewood
e8ef74156a Added print_statemachine_diagnostics
The responder name is now cached in LLURLRequest
(ResponderBase::getName() must return a string literal).
The run time (in the main thread) per state machine is now accumulated
in AIStateMachine (instead of AIEngine::QueueElement).
When AIStateMachine::mainloop runs longer than StateMachineMaxTime
then a warning is printed that now includes the time spent in the
slowest state machine (that frame) and (if it is a LLURLRequest)
what the corresponding responder is. Also the total accumulated run
time of that state machine is printed.

From this is can be concluded that the only responder currently
regularly holding up the main thread is LLMeshLODResponder (mostly 30 to
100 ms, but with spikes in the 1 to 2 second range some times).
2013-03-08 01:50:02 +01:00
Aleric Inglewood
e3f4022ffa Merge remote-tracking branch 'singu/master'
Conflicts:
	indra/newview/llvoavatar.cpp

Bug fix is no longer needed.
2013-03-07 16:53:15 +01:00
Aleric Inglewood
f52e055414 Merge branch 'master' into curlthreading4 2013-03-07 13:49:42 +01:00
Aleric Inglewood
65d750b190 Add CPU cycles to AIStateMachine in the crashlogger
Also removes unused Debug Setting CurlMaximumNumberOfHandles.
The maximum number of handles is limitted by
CurlMaxTotalConcurrentConnections.
2013-03-07 13:44:40 +01:00
Aleric Inglewood
b9b5f13624 Run HTTPGetResponder in any thread.
This fixes a bug where unref() was called when a state machine was
aborted before it reached bs_initialized. Debug code was added to detect
errors related to that.

In order to run HTTPGetResponder in any thread, I needed direct access
to LLHTTPClient::request, so I had to move that to the header file,
and therefore had to move ERequestAction from LLURLRequest to
LLHTTPClient to avoid include problems.

With this, textures are fetched with no latency: call to
LLHTTPClient::request runs all the way till the state machine is idle
(AICurlEasyRequestStateMachine_waitAdded). There is small delay till the
curl thread wakes up, which then processes the request and opens the url
etc. When the transaction is finished, it calls
AIStateMachine::advance_state(AICurlEasyRequestStateMachine_removed_after_finished)
which subsequently doesn't return until the state machine is completely
finished (bs_killed). The LLURLRequest isn't deleted yet at that point
because the AITimer of the LLURLRequest runs in the main thread: it is
aborted, but only the next time the main thread state engines run that
is deleted and the timer keeps an LLPointer to it's parent, the
LLURLRequest, so only then the LLURLRequest object is destructed. This
however has nothing to do with the texture-bandwidth loop.
2013-03-07 01:52:21 +01:00
Aleric Inglewood
4cd7dec92b Merge branch 'master' into curlthreading4
Conflicts:
	indra/aistatemachine/aistatemachine.cpp
	indra/aistatemachine/aistatemachine.h
	indra/llmessage/aicurleasyrequeststatemachine.cpp
2013-03-06 03:34:05 +01:00
Aleric Inglewood
c4dceaf3e9 Rewrite of AIStateMachine, version 2. 2013-03-06 03:26:43 +01:00
Siana Gearz
13e0bc2742 Merge branch 'sunshine' of git://github.com/Shyotl/SingularityViewer
Conflicts:
	indra/newview/lldrawable.cpp
	indra/newview/llviewerwindow.cpp
2013-02-26 00:20:26 +01:00
Shyotl
94a0040ddb Sunshine catchup. 2013-02-25 12:53:18 -06:00
Aleric Inglewood
13e032fb04 Make AICurlThread::wakeup_thread thread-safe. 2013-02-23 23:29:43 +01:00
Aleric Inglewood
803e92020b Renamed AICurlThread::mWakeUpMutex --> AICurlThread::mWakeUpFlagMutex 2013-02-23 23:23:48 +01:00
Aleric Inglewood
b6cbed838f Assertion bug fix for libcwd with dc::curl on and curlio off. 2013-02-23 21:37:07 +01:00
Aleric Inglewood
19314b6686 Removed two unnecessary states from AICurlEasyRequestStateMachine
Removed AICurlEasyRequestStateMachine_added and
AICurlEasyRequestStateMachine_finished because the state machine is not
taking any action there anyway, and those states might be skipped all
together even, so they make no sense / shouldn't exist.
2013-02-23 21:33:37 +01:00
Aleric Inglewood
4851cc174e Revert "Work in progress"
This reverts commit ef35aa7954
because it contained too much wrong things that I won't be
using. I'll re-commit stuff from it after that that I do
want to keep.
2013-02-23 20:00:13 +01:00
Aleric Inglewood
78bb94eb42 Bug fix: remove remainder of test code 2013-02-23 19:36:18 +01:00
Aleric Inglewood
ef35aa7954 Work in progress
This work extends AIStateMachine to run multiplex() in the thread
that calls run(), cont() or set_state(). Note that all three
eventually call locked_cont(), so thats where multiplex() is called
from. Calling multiplex() means "running the state machine", as in
"calling multiplex_impl".

Currently only LLURLRequest uses this feature, and then only
for the HTTPGetResponder, and well only for the initializing,
start up and normal finish states.

A current/remaining problem is that we run into a situation where
the curl thread runs a statemachine to it's finish and kills it,
while the main thread is also 'running' it and tries to call
multiplex while the statemachine isn't running anymore.
2013-02-20 23:29:38 +01:00
Siana Gearz
00cb7a0e51 Merge branch 'sunshine' of git://github.com/Shyotl/SingularityViewer 2013-02-19 21:12:14 +01:00
Shyotl
76f3dc9e19 Massive sunshine/viewer-dev catchup. Further implemented serverside baking and added/updated metrics feedback. 2013-02-19 01:50:46 -06:00
Siana Gearz
dbdd0ec4f1 Merge branch 'Canon' of git://github.com/Lirusaito/SingularityViewer 2013-02-17 15:40:27 +01:00
Siana Gearz
49c872c86d Merge branch 'sunshine' of https://github.com/Shyotl/SingularityViewer 2013-02-17 15:28:48 +01:00
Aleric Inglewood
dc3f33717c Fixed assertion in HTTPTimeout::lowspeed
mTotalBytes had the meaning of "the sum of all elements in the vector",
but was reset to 0 at the start of a transaction. The meaning is now
changed to "total number of bytes in the vector that belong to the
current transaction".
2013-02-14 00:09:42 +01:00
Shyotl
f147a734b1 LLStat dead code removal 2013-02-12 20:47:55 -06:00
Aleric Inglewood
c6c343a45b Compile bug fixes when -DDEBUG_CURLIO 2013-02-12 23:44:55 +01:00
Lirusaito
f95830fe23 Extend fuctionality of non-SL capability 2013-02-11 19:12:17 -05:00
Lirusaito
1d4858ae85 Add support for two non-SL grid features/flags.
Adds support for GamingData cap, and flags: PF_GAMING, DFQ_FILTER_GAMING, REGION_FLAGS_GAMING, and REGION_FLAGS_HIDE_FROM_SEARCH
Adds GamingCheck to floater_about_land.xml
Adds filter_gaming checkboxes to floater_directory* xmls
Adds "is gaming" and "hide from search" checkboxes to floater_god_tools.xml
2013-02-11 01:14:09 -05:00
Lirusaito
cff7a2a464 Brought in Script Limits from v-d! (Accessible from About Land) 2013-02-11 01:12:21 -05:00
Siana Gearz
064601ae5e Merge branch 'master' of git://github.com/AlericInglewood/SingularityViewer 2013-02-03 22:18:44 +01:00
Siana Gearz
6a774e4685 This should fix voice decline crash 2013-02-03 21:56:13 +01:00
Aleric Inglewood
83fb898852 Bug fix: Wake up curl thread at exit of viewer. 2013-02-03 17:24:26 +01:00
Latif Khalifa
8584e6da4c Merge branch 'master' into meshupload
Conflicts:
	indra/llcommon/llhash.h
	indra/newview/CMakeLists.txt
	indra/newview/llfloatermodelpreview.cpp
	indra/newview/llfloatermodelpreview.h
	indra/newview/llpanelprofile.h
2013-01-30 00:36:31 +01:00
Aleric Inglewood
1c8027b1e6 Add statemachine parent callback support to LLHTTPClient::post 2013-01-27 22:02:19 +01:00
Latif Khalifa
18816ae146 Merge remote-tracking branch 'shyotl/sunshine' 2013-01-21 11:25:10 +01:00
Shyotl
e622e03d2a Bulk of server-baking impelmentation and a bit of cleanup. 2013-01-13 02:37:12 -06:00
Aleric Inglewood
3a414b21fa Temporary workaround for release. 2013-01-13 02:18:00 +01:00
Aleric Inglewood
e99a906f54 Testsuite part 1: make it compile alone. 2013-01-13 01:58:49 +01:00
Aleric Inglewood
fc4b02cee8 Moved HTTPTimeout to it's own files. 2013-01-12 23:00:21 +01:00
Aleric Inglewood
024c62aed4 Fix the "map/set iterators incompatible" bug.
cookies is only valid when AIHTTPReceivedHeaders::getValues return true.
2013-01-12 04:24:21 +01:00
Aleric Inglewood
e56f14502e Fill fd_sets AFTER processing command queue. 2013-01-12 02:51:44 +01:00
Aleric Inglewood
f9738cb611 Add getName() to every non-base class Responder object. 2013-01-11 04:15:55 +01:00
Aleric Inglewood
741a160913 Fine tune of private (libcwd) assertion.
It turns out that it's possible to receive data before an upload
finished when the server sends HTTP_BAD_REQUEST in the middle of the
upload (this happens to me when I try to upload a 6000x6000 image to my
profile feed, with is a 44MB file). So, in that case the finished upload
detection did not fail and we shouldn't assert.
2013-01-11 01:28:46 +01:00
Shyotl
7ca974f731 Merge branch 'master' of https://github.com/singularity-viewer/SingularityViewer.git into sunshine 2013-01-08 17:06:08 -06:00
Shyotl
54771409d6 Merge branch 'master' into sunshine
Conflicts:
	indra/llimage/llimage.cpp
	indra/llui/llui.cpp
	indra/newview/llvoavatar.cpp
2013-01-08 17:05:29 -06:00
Aleric Inglewood
63ae33eca7 Fix crash in AICurlPrivate::curlthread::PollSet::next
Introduced in
6dcda3595e
(Add recovery for randomly closed socket desciptors.)

By copying CurlSocketInfo* into mCopiedFileDescriptors, it was possible
that we accessed a deleted CurlSocketInfo for it's filedescriptor,
returning a random value, which, when passed to FD_ISSET could cause a
SIGSEGV.

I reverted this change and now store the literal socket descriptors in
mCopiedFileDescriptors again. It is not a problem when libcurl deletes
the corresponding CurlSocketInfo (through a callback to
MultiHandle::socket_callback) in that case, because the fd_set we test
against isn't updated as a result of that, not until we're down with
mCopiedFileDescriptors (at the re-entry of select()).
2013-01-08 23:43:25 +01:00
Aleric Inglewood
5188693469 Compile fix for last commit and Release 2013-01-08 20:33:29 +01:00
Aleric Inglewood
d8485350e7 Address clang warnings.
* Split off AIThreadSafeBitsPOD, because offsetof may only be used on POD types.
* Added ASSERT_ONLY and ASSERT_ONLY_COMMA
* Removed a few unused class members
* Fixed a bug in AIHTTPReceivedHeaders::equal that more or less only
  compared the length of the headers before :/
2013-01-08 17:50:09 +01:00
Shyotl
d71210e942 Trivial changes, mostly to clean up diff noise. Majority of changes are comment corrections or licenseinfo updates. (does not include newview directory) 2013-01-07 14:44:54 -06:00
Aleric Inglewood
639b264d2d Do not crash upon corrupted HTTP header.
This addresses the reported assertion by luis thibodeaux.
2013-01-03 21:06:20 +01:00
Siana Gearz
17e0c79fe7 Build fix Linux 2013-01-03 03:03:06 +01:00
Aleric Inglewood
6dcda3595e Add recovery for randomly closed socket desciptors.
Although it should never happen that a file descriptor is suddenly
closed, it appeared that this happens on linux 64bit when using
FMODex... Not really sure how useful this is, but at least now the
viewer just continues to work, as if -say- the socket was closed
remotely. Before the curl thread would go into a tight loop that it
wouldn't recover from until the watchdog thread terminated the viewer.
2012-12-31 19:24:37 +01:00