summaryrefslogtreecommitdiff
path: root/indra/llmessage/message.cpp
AgeCommit message (Collapse)Author
2020-05-14DRTVWR-476, SL-12204: Fix crash in Marketplace Listings.Nat Goodspeed
The observed crash was due to sharing a stateful global resource (the global LLMessageSystem instance) between different tasks. Specifically, a coroutine sets its mMessageReader one way, expecting that value to persist until it's done with message parsing, but another coroutine sneaks in at a suspension point and sets it differently. Introduce LockMessageReader and LockMessageChecker classes, which must be instantiated by a consumer of the resource. The constructor of each locks a coroutine-aware mutex, so that for the lifetime of the lock object no other coroutine can instantiate another. Refactor the code so that LLMessageSystem::mMessageReader can only be modified by LockMessageReader, not by direct assignment. mMessageReader is now an instance of LLMessageReaderPointer, which supports dereferencing and comparison but not assignment. Only LockMessageReader can change its value. LockMessageReader addresses the use case in which the specific mMessageReader value need only persist for the duration of a single method call. Add an instance in LLMessageHandlerBridge::post(). LockMessageChecker is a subclass of LockMessageReader: both lock the same mutex. LockMessageChecker addresses the use case in which the specific mMessageReader value must persist across multiple method calls. Modify the methods in question to require a LockMessageChecker instance. Provide LockMessageChecker forwarding methods to facilitate calling the underlying LLMessageSystem methods via the LockMessageChecker instance. Add LockMessageChecker instances to LLAppViewer::idleNetwork(), a couple cases in idle_startup() and LLMessageSystem::establishBidirectionalTrust().
2016-11-14Merged in lindenlab/viewer-cleanupAndreyL ProductEngine
2016-08-30Automated merge with ssh://bitbucket.org/lindenlab/viewer-releaseNat Goodspeed
2016-07-26Fix HttpCoroutineAdapter name for clarityAnsariel Hiller
2016-04-04merge with 4.0.3-releaseOz Linden
2016-03-07merge DRTVWR-398 build cleanup fixesOz Linden
2016-02-12MAINT-1945: correct total bytes sent in log statsOz Linden
2015-11-10remove execute permission from many files that should not have itOz Linden
2015-09-18Set consistent terminology for yield/wait -> suspend for coroutines.Rider Linden
2015-09-14MAINT-5507: Remove HTTPClient and related cruft.Rider Linden
2015-08-24MAINT-4952: Removed a bit of debug code that got included accidentally and ↵Rider Linden
change host == LLHost() to host.isInvalid()
2015-08-18MAINT-5506: Fix ugly timing bug in llurlentry static initialization.Nat Goodspeed
The problem was that class-static LLUrlEntryParcel::sRegionHost was being initialized by copying class-static LLHost::invalid. Naturally, these two statics are initialized in different source files. Since C++ makes no promises about the relative order in which objects in different object files are initialized, it seems we hit a case in which we were trying to initialize sRegionHost by copying a completely uninitialized LLHost::invalid. In general we might attempt to address such cross-translation-unit issues by introducing an LLSingleton. But in this particular case, the punch line is that LLHost::invalid is explicitly constructed identically to a default-constructed LLHost! In other words, LLHost::invalid provides nothing we couldn't get from LLHost(). All it gives us is an opportunity for glitches such as the above. Remove LLHost::invalid and all references, replacing with LLHost().
2015-08-14MAINT-5506: Forgot to remove LLFnPtrResponderRider Linden
2015-08-14MAINT-5506: Converted llmessage untrusted sim message responder to coroutine.Rider Linden
Removed HTTPSender, HTTPNullSender, HTTPCapSender. Moved UntrustedMessageCap storage into LLHost Added boost libraries to PROJECT_x_TEST linkage.
2015-05-23MAINT-5232: Make gMessageSystem an LLPounceable<LLMessageSystem*>.Nat Goodspeed
This will permit other subsystems to use gMessageSystem.callWhenReady() to (e.g.) register callbacks as soon as gMessageSystem is fully initialized.
2015-04-13merge changes for 3.7.27-releaseOz Linden
2014-12-18MAINT-4708 better grouping of ack messages between viewer and serverandreykproductengine
2014-12-10Rename llround(..) to ll_round(..) because of a collision with MS llround ↵callum_linden
(long long round) in VS2013
2014-05-13sunshine-external merge WIPBrad Payne (Vir Linden)
2014-03-12mergeBrad Payne (Vir Linden)
2014-03-12merge with releaseRichard Linden
2013-11-12MAINT-3269 FIXED crash in LLMessageSystem::callExceptionFuncmaksymsproductengine
2013-08-18SH-4433 WIP: Interesting: Statistics > Ping Sim is always 0 msRichard Linden
continued conversion to units system made units perform type promotion correctly and preserve type in arithmetic e.g. can now do LLVector3 in units added typedefs for remaining common unit types, including implicits
2013-08-16SH-4433 WIP: Interesting: Statistics > Ping Sim is always 0 msRichard Linden
converted many values over to units system in effort to track down source of 0 ping
2013-08-09second phase summer cleaningRichard Linden
replace llinfos, lldebugs, etc with new LL_INFOS(), LL_DEBUGS(), etc.
2013-07-30Summer cleaning - removed a lot of llcommon dependencies to speed up build timesRichard Linden
consolidated most indra-specific constants in llcommon under indra_constants.h fixed issues with operations on mixed unit types (implicit and explicit) made LL_INFOS() style macros variadic in order to subsume other logging methods such as ll_infos added optional tag output to error recorders
2013-05-21mergeBrad Payne (Vir Linden)
2013-04-04Renaming HTTP_HEADER_* into HTTP_IN_HEADER_* and HTTP_OUT_HEADER_* to make ↵Don Kjer
it more clear which header strings should be used for incoming vs outgoing situations. Using constants for commonly used llhttpnode context strings.
2013-03-29Update Mac and Windows breakpad builds to latestGraham Madarasz
2013-03-13Large changes to the LLCurl::Responder API, as well as pulling in some ↵Don Kjer
changes to common libraries from the server codebase: * Additional error checking in http handlers. * Uniform log spam for http errors. * Switch to using constants for http heads and status codes. * Fixed bugs in incorrectly checking if parsing LLSD xml resulted in an error. * Reduced spam regarding LLSD parsing errors in the default completedRaw http handler. It should not longer be necessary to short-circuit completedRaw to avoid spam. * Ported over a few bug fixes from the server code. * Switch mode http status codes to use S32 instead of U32. * Ported LLSD::asStringRef from server code; avoids copying strings all over the place. * Ported server change to LLSD::asBinary; this always returns a reference now instead of copying the entire binary blob. * Ported server pretty notation format (and pretty binary format) to llsd serialization. * The new LLCurl::Responder API no longer has two error handlers to choose from. Overriding the following methods have been deprecated: ** error - use httpFailure ** errorWithContent - use httpFailure ** result - use httpSuccess ** completed - use httpCompleted ** completedHeader - no longer necessary; call getResponseHeaders() from a completion method to obtain these headers. * In order to 'catch' a completed http request, override one of these methods: ** httpSuccess - Called for any 2xx status code. ** httpFailure - Called for any non-2xx status code. ** httpComplete - Called for all status codes. Default implementation is to call either httpSuccess or httpFailure. * It is recommended to keep these methods protected/private in order to avoid triggering of these methods without using a 'push' method (see below). * Uniform error handling should followed whenever possible by calling a variant of this during httpFailure: ** llwarns << dumpResponse() << llendl; * Be sure to include LOG_CLASS(your_class_name) in your class in order for the log entry to give more context. * In order to 'push' a result into the responder, you should no longer call error, errorWithContent, result, or completed. * Nor should you directly call httpSuccess/Failure/Completed (unless passing a message up to a parent class). * Instead, you can set the internal content of a responder and trigger a corresponding method using the following methods: ** successResult - Sets results and calls httpSuccess ** failureResult - Sets results and calls httpFailure ** completedResult - Sets results and calls httpCompleted * To obtain information about a the response from a reponder method, use the following getters: ** getStatus - HTTP status code ** getReason - Reason string ** getContent - Content (Parsed body LLSD) ** getResponseHeaders - Response Headers (LLSD map) ** getHTTPMethod - HTTP method of the request ** getURL - URL of the request * It is still possible to override completeRaw if you want to manipulate data directly out of LLPumpIO. * See indra/llmessage/llcurl.h for more information.
2012-07-20MAINT-570 Remove unused memory tracking system LLMemTypeDave Parks
2012-02-01converted a bunch of narrowing implicit conversions to explicitRichard Linden
2011-04-01VWR-24487 make PREHASH variables char const* constBoroondas Gupte
2010-08-13Change license from GPL to LGPL (version 2.1)Oz Linden
2010-01-29partial appeasement for CID-309Tofu Linden
only this piece really matters. a bit. Checker: UNINIT_CTOR Function: LLMessageSystem::LLMessageSystem(const std::basic_string<char, std::char_traits<char>, std::allocator<char>>&, unsigned int, int, int, int, bool, float, float) File: /indra/llmessage/message.cpp
2009-06-21merge -r 122421-124917 viewer-2.0.0-2 -> viewer-2.0.0-3Steven Bennetts
ignore-dead-branch
2009-03-20svn merge -r113004:115000 ↵Dave Simmons
svn+ssh://svn.lindenlab.com/svn/linden/branches/server/server-1.26 Merge latest 1.26 into trunk
2009-02-25svn merge -r108815:112761 ↵Robert Knop
svn+ssh://svn.lindenlab.com/svn/linden/branches/server/server-1.26 The biggest things in this are Scalable Space Servers and Maint-Server-6 QAR-1209 : SSS QAR-1295 : maint-server-6 Conflicts resolved by prospero: C scripts/farm_distribute C scripts/automated_build_scripts/build-linux.sh : resolved by prospero, mostly kept the merge-right version in the conflict, but there was one block of repeated code from earlier that I removed. C scripts/automated_build_scripts/build-mac.sh : kept merge-right C indra/llcommon/llversionserver.h : svn revert C indra/newsim/llsimparcel.h : kept *both*... working had "setArea", merge-right had exportStream and importStream C indra/newsim/llsimparcel.cpp : see llsimparcel.h C indra/newsim/lltask.h : working had LLTask derived also from LLScriptResourceConsumer, merge-right had LLTask dervied also from LLAgentPosition. To resolve conflict, derive from both. C indra/newsim/lllslmanager.h : kept merge-right (had an added comment) C indra/llmessage/llhttpnode.h : kept working (added the definition of method LLHTTPNode::extendedResult) C indra/lscript/lscript_execute_mono/llscriptexecutemono.cpp C indra/lscript/lscript_execute_mono/llscriptexecutemono.h : These two were resolved by si, in consultation with daveh I also had to add the following stubs to indra/newsim/tests/llgodkickutils_test.cpp in order to get it to compile: // LLScriptResourceConsumer interface methods in LLTask LLScriptResource::LLScriptResource() { } LLScriptResourcePool::LLScriptResourcePool() { } LLScriptResourcePool LLScriptResourcePool::null; LLScriptResourceConsumer::LLScriptResourceConsumer() { } LLScriptResourcePool& LLScriptResourceConsumer::getScriptResourcePool() { return LLScriptResourcePool::null; } const LLScriptResourcePool& LLScriptResourceConsumer::getScriptResourcePool() const { return LLScriptResourcePool::null; } bool LLScriptResourceConsumer::switchScriptResourcePools(LLScriptResourcePool& new_pool) { return false; } bool LLScriptResourceConsumer::canUseScriptResourcePool(const LLScriptResourcePool& resource_pool) { return false; } bool LLScriptResourceConsumer::isInPool(const LLScriptResourcePool& resource_pool) { return false; } void LLScriptResourceConsumer::setScriptResourcePool(LLScriptResourcePool& pool) { } S32 LLTask::getUsedPublicURLs() const { return 0; } void LLTask::setScriptResourcePool(LLScriptResourcePool& pool) { }
2009-01-22Merging from production branch to trunkRobert Knop
svn merge -r108266:108604 svn+ssh://svn.lindenlab.com/svn/linden/branches/server/server-1.25 One merge conflict, in indra/backbone/agent_linden_dollar.py, which was very small, and resolved by Kartic & Prospero.
2009-01-19svn merge -r108236:108243 ↵Robert Knop
svn+ssh://svn.lindenlab.com/svn/linden/branches/server/server-1.25 Still merging from server-1.25... one day I will catch up! No conflicts
2009-01-08Result of svn merge -r107256:107258 ↵Aaron Brashears
svn+ssh://svn/svn/user/phoenix/license_2009_merge into trunk. QAR-1165
2008-12-04Merging from server/server-1.25 back to trunk.Robert Knop
svn merge -r99446:104838 svn+ssh://svn.lindenlab.com/svn/linden/branches/server/server-1.25 Conflicts resolved by Prospero, except for one scary conflict in SendConfirmationEmail.php which was resolved by jarv.
2008-11-07QAR-992 Merging revisions 101012-101170,101686-101687 of ↵Mark Palange
svn+ssh://svn.lindenlab.com/svn/linden/qa/viewer_combo_1-22-merge into linden/release
2008-10-08merge r97380-98701 branches/viewer/viewer_1-21 (Viewer RC5 and security ↵Mark Palange
fixes) merge to trunk (for real)
2008-10-07Roll back of r98854 Accidentally commited merge in progressMark Palange
2008-10-07merge r97380-98701 branches/viewer/viewer_1-21 (Viewer RC5 and security ↵Mark Palange
fixes) merge to trunk
2008-10-01svn merge -r96886:98039 ↵Christian Goetze
svn+ssh://svn.lindenlab.com/svn/linden/branches/Branch_1-24-Server --> release
2008-06-26QAR-628 merge string-cleanup-5 -r 90476:90508 -> releaseSteven Bennetts
dataserver-is-deprecated
2008-06-02svn merge -r88066:88786 ↵Bryan O'Sullivan
svn+ssh://svn.lindenlab.com/svn/linden/branches/cmake-9-merge dataserver-is-deprecated for-fucks-sake-whats-with-these-commit-markers
2008-05-14Result of svn merge -r 87455:87538 $SVN/branches/tulla/vc3-merge .Eric Tulla
Passed QA as part of QAR-491.