Age | Commit message (Collapse) | Author |
|
Instead, introduce bool CoroData::isMain and test that. Use "main" for the
name of the main coroutine. That eliminates the logname() method, also the
llcoro::logname() free function. It also obviates the alternate CoroData
constructor.
Use boost::fibers::fiber::id as the LLInstanceTracker key for CoroData,
instead of the coroutine name. Introduce get_CoroData(id), also getName(id).
Extract static CoroData for the main coroutine to main_CoroData() so both
get_CoroData() overloads can use it.
Ditch unused get_CoroData(string) parameter: now get_CoroData().
Introduce LLCoros::mNameMap for lookup by name (e.g. killreq()). CoroData's
constructor puts an entry into mNameMap; the destructor removes it. Since
mNameMap is thread_local (unlike an LLInstanceTracker key), that theoretically
permits duplicate coroutine names on different threads.
Introduce mPrefixMap to help generate distinct coroutine names, instead of a
single scalar.
Introduce CoroData::getName(), and use it in both LLCoros::getName()
overloads. CoroData::getName() appends mStatus if it's not empty. This is
useful for disambiguating generic pool coroutines based on the current task.
|
|
|
|
Modernize lltut.h. Allow both F32 and F64 for ensure_approximately_equals() etc.
Use std::string_view instead of const char* for message string to allow
passing std::string as well. Use stringize() instead of explicit
std::stringstream idiom.
|
|
|
|
Consensus seems to be that (a) string_view is, in effect, already a reference,
(b) it's small enough to make pass-by-value reasonable and (c) the optimizer
can reason about values way better than it can about references.
|
|
|
|
|
|
|
|
# Conflicts:
# indra/newview/llvoicewebrtc.cpp
|
|
code in PCH (#2361)
|
|
# Conflicts:
# .github/workflows/build.yaml
# autobuild.xml
# indra/cmake/Copy3rdPartyLibs.cmake
# indra/cmake/FreeType.cmake
# indra/newview/llappviewer.cpp
# indra/newview/skins/default/xui/en/floater_fast_timers.xml
# indra/newview/viewer_manifest.py
# indra/test/test.cpp
|
|
* Enable /permissive- on MSVC for better C++ conformance and fix related errors
* Clean up left over warning suppressions from old library or msvc versions
|
|
|
|
windows
|
|
Remove documented `LLEventPump` support for `LLEventTrackable`. That claimed
support was always a little bit magical/fragile. IF:
* a class included `LLEventTrackable` as a base class AND
* an instance of that class was managed by `boost::shared_ptr` AND
* you passed one of that class's methods and the `boost::shared_ptr`
specifically to `boost::bind()` AND
* the resulting `boost::bind()` object was passed into `LLEventPump::listen()`
THEN the promise was that on destruction of that object, that listener would
automatically be disconnected -- instead of leaving a dangling pointer bound
into the `LLEventPump`, causing a crash on the next `LLEventPump::post()` call.
The only existing code in the viewer code base that exercised `LLEventTrackable`
functionality was in test programs. When the viewer calls `LLEventPump::listen()`,
it typically stores the resulting connection object in an `LLTempBoundListener`
variable, which guarantees disconnection on destruction of that variable.
The fact that `LLEventTrackable` support is specific to `boost::bind()`, that it
silently fails to keep its promise with `std::bind()` or a lambda or any other
form of C++ callable, makes it untrustworthy for new code.
Note that the code base still uses `boost::signals2::trackable` for other
`boost::signals2::signal` instances not associated with `LLEventPump`. We are
not changing those at this time.
|
|
# Conflicts:
# autobuild.xml
# indra/cmake/JsonCpp.cmake
# indra/llimage/llimageworker.cpp
# indra/llmessage/CMakeLists.txt
# indra/llprimitive/llmodel.cpp
# indra/llprimitive/llmodelloader.cpp
# indra/llprimitive/llmodelloader.h
# indra/llwindow/llkeyboard.cpp
# indra/llwindow/llkeyboard.h
# indra/llwindow/llkeyboardheadless.cpp
# indra/llwindow/llkeyboardheadless.h
# indra/llwindow/llkeyboardsdl.cpp
# indra/llwindow/llkeyboardsdl.h
# indra/llwindow/llwindowsdl.cpp
# indra/llwindow/llwindowsdl.h
# indra/newview/app_settings/shaders/class1/deferred/screenSpaceReflUtil.glsl
# indra/newview/llappviewerlinux_api_dbus.cpp
# indra/newview/llconversationloglist.cpp
# indra/newview/lldirpicker.cpp
# indra/newview/llfilepicker.cpp
# indra/newview/llfloateremojipicker.cpp
# indra/newview/llfloaterpreferencesgraphicsadvanced.cpp
# indra/newview/llmodelpreview.cpp
# indra/newview/lloutfitslist.cpp
# indra/newview/llpanelface.cpp
# indra/newview/llviewerobject.h
# indra/newview/llxmlrpctransaction.cpp
# indra/newview/viewer_manifest.py
|
|
|
|
and llunittype.h for now
|
|
|
|
|
|
Setting LOGTEST=DEBUG, when many unit/integration tests must be rebuilt and
run, can result in lots of unnecessary output. When we only want DEBUG log
output from a specific test program, make test.cpp recognize an environment
variable LOGTEST_testname, where 'testname' might be the full basename of the
executable, or part of INTEGRATION_TEST_testname or PROJECT_foo_TEST_testname.
When test.cpp notices a non-empty variable by that name, it behaves as if
LOGTEST were set to that value.
|
|
"possible loss of precision" warnings
|
|
Retargeting PR #1496 to Maint B.
|
|
Introduce AlwaysReturn<void> specialization, which always discards any result
of calling the specified callable with specified args.
Derive new Windows_SEH_exception from LLException, not std::runtime_error.
Put the various SEH functions in LL::seh nested namespace, e.g.
LL::seh::catcher() as the primary API.
Break out more levels of Windows SEH handler to work around the restrictions on
functions containing __try/__except.
The triadic catcher() overload now does little save declare a std::string
stacktrace before forwarding the call to catcher_inner(), passing a reference
to stacktrace along with the trycode, filter and handler functions.
catcher_inner() accepts the stacktrace and the three function template
arguments. It contains the __try/__except logic. It calls a new filter_()
wrapper template, which calls fill_stacktrace() before forwarding the call to
the caller's filter function. fill_stacktrace(), in the .cpp file, contains
the logic to populate the stacktrace string -- unless the Structured Exception
is stack overflow, in which case it puts an explanatory string instead.
catcher_inner()'s __except clause passes not only the code, but also the
stacktrace string, to the caller's handler function. It wraps the caller's
handler function in always_return<rtype>(), where rtype is the type returned
by the trycode function. This allows a handler to return a value, while also
supporting the void handler case, e.g. one that throws a C++ exception. (This
is why we need AlwaysReturn<void>: some trycode() functions are themselves
void.)
For the dyadic catcher() overload, introduce common_filter() containing the
logic to distinguish a C++ exception from any other kind of Structured
Exception. The fact that the stacktrace is captured before the filter function
is called should permit capturing a stacktrace for a C++ exception as well as
for most other Structured Exceptions.
As before, the monadic catcher() overload supplies the rethrow() handler, in
the .cpp file.
Change existing calls from seh_catcher() to LL::seh::catcher().
|
|
|
|
|
|
# Conflicts:
# autobuild.xml
# indra/cmake/CMakeLists.txt
# indra/cmake/GoogleMock.cmake
# indra/llaudio/llaudioengine_fmodstudio.cpp
# indra/llaudio/llaudioengine_fmodstudio.h
# indra/llaudio/lllistener_fmodstudio.cpp
# indra/llaudio/lllistener_fmodstudio.h
# indra/llaudio/llstreamingaudio_fmodstudio.cpp
# indra/llaudio/llstreamingaudio_fmodstudio.h
# indra/llcharacter/llmultigesture.cpp
# indra/llcharacter/llmultigesture.h
# indra/llimage/llimage.cpp
# indra/llimage/llimagepng.cpp
# indra/llimage/llimageworker.cpp
# indra/llimage/tests/llimageworker_test.cpp
# indra/llmessage/tests/llmockhttpclient.h
# indra/llprimitive/llgltfmaterial.h
# indra/llrender/llfontfreetype.cpp
# indra/llui/llcombobox.cpp
# indra/llui/llfolderview.cpp
# indra/llui/llfolderviewmodel.h
# indra/llui/lllineeditor.cpp
# indra/llui/lllineeditor.h
# indra/llui/lltextbase.cpp
# indra/llui/lltextbase.h
# indra/llui/lltexteditor.cpp
# indra/llui/lltextvalidate.cpp
# indra/llui/lltextvalidate.h
# indra/llui/lluictrl.h
# indra/llui/llview.cpp
# indra/llwindow/llwindowmacosx.cpp
# indra/newview/app_settings/settings.xml
# indra/newview/llappearancemgr.cpp
# indra/newview/llappearancemgr.h
# indra/newview/llavatarpropertiesprocessor.cpp
# indra/newview/llavatarpropertiesprocessor.h
# indra/newview/llbreadcrumbview.cpp
# indra/newview/llbreadcrumbview.h
# indra/newview/llbreastmotion.cpp
# indra/newview/llbreastmotion.h
# indra/newview/llconversationmodel.h
# indra/newview/lldensityctrl.cpp
# indra/newview/lldensityctrl.h
# indra/newview/llface.inl
# indra/newview/llfloatereditsky.cpp
# indra/newview/llfloatereditwater.cpp
# indra/newview/llfloateremojipicker.h
# indra/newview/llfloaterimsessiontab.cpp
# indra/newview/llfloaterprofiletexture.cpp
# indra/newview/llfloaterprofiletexture.h
# indra/newview/llgesturemgr.cpp
# indra/newview/llgesturemgr.h
# indra/newview/llimpanel.cpp
# indra/newview/llimpanel.h
# indra/newview/llinventorybridge.cpp
# indra/newview/llinventorybridge.h
# indra/newview/llinventoryclipboard.cpp
# indra/newview/llinventoryclipboard.h
# indra/newview/llinventoryfunctions.cpp
# indra/newview/llinventoryfunctions.h
# indra/newview/llinventorygallery.cpp
# indra/newview/lllistbrowser.cpp
# indra/newview/lllistbrowser.h
# indra/newview/llpanelobjectinventory.cpp
# indra/newview/llpanelprofile.cpp
# indra/newview/llpanelprofile.h
# indra/newview/llpreviewgesture.cpp
# indra/newview/llsavedsettingsglue.cpp
# indra/newview/llsavedsettingsglue.h
# indra/newview/lltooldraganddrop.cpp
# indra/newview/llurllineeditorctrl.cpp
# indra/newview/llvectorperfoptions.cpp
# indra/newview/llvectorperfoptions.h
# indra/newview/llviewerparceloverlay.cpp
# indra/newview/llviewertexlayer.cpp
# indra/newview/llviewertexturelist.cpp
# indra/newview/macmain.h
# indra/test/test.cpp
|
|
|
|
|
|
|
|
Since August 2023, we've seen occasional GitHub Windows build test runs
terminate with 0xC00000FD: stack overflow. We've usually responded by bumping
up the default coroutine stack size.
On closer examination, it's always llleap_test.cpp that blows up that way --
and llleap_test.cpp doesn't appear to use coroutines at all. So apparently
we've been consuming more address space for ALL viewer coroutines without
actually addressing the problem.
Reset the default coroutine stack size to where it was before we started
bumping it up in response to these llleap_test.cpp stack overflow failures.
Note that LLCoros already catches and reports Windows structured exceptions,
underscoring that the observed stack overflow is not from within a coroutine.
While at it, restore the Windows llleap_test.cpp data volume to match Posix.
We think the problem that led to reducing that data volume was an APR bug,
which we hope has been fixed.
Equip test.cpp, the test driver program for all our TUT unit and integration
tests, with a Windows structured exception handler. Try to treat a Windows
structured exception as a test failure -- instead of silently terminating with
0xC00000FD. Moreover, when a structured exception occurs, output a stack trace
so we can try to track it down.
|
|
|
|
(cherry picked from commit 82d713782529074b03720833038cb0df2b8bcffd)
|
|
|
|
|
|
|
|
|
|
LF, and trim trailing whitespaces as needed
|
|
|
|
# Conflicts:
# autobuild.xml
# indra/llimage/llimage.cpp
# indra/llui/llsearcheditor.cpp
# indra/llui/llview.cpp
# indra/newview/llagent.cpp
# indra/newview/llappviewer.cpp
# indra/newview/llfloatercamera.cpp
# indra/newview/llfloatereditsky.cpp
# indra/newview/llfloatereditwater.cpp
# indra/newview/llinventoryfunctions.cpp
# indra/newview/lloutfitgallery.cpp
# indra/newview/lloutfitslist.cpp
# indra/newview/llpanelgroupbulkban.cpp
# indra/newview/llsidepanelappearance.cpp
# indra/newview/llvovolume.cpp
|
|
Break out LOGTEST_enabled() inline function because it's used for both Debug
and debug_expr().
|
|
DRTVWR-600-maint-A
# Conflicts:
# indra/llcommon/llapp.cpp
# indra/llcommon/llapp.h
# indra/llimage/llimageworker.cpp
# indra/llui/llcontainerview.cpp
# indra/llui/llcontainerview.h
# indra/llui/llkeywords.cpp
# indra/llui/lltabcontainer.cpp
# indra/llui/lltextbase.cpp
# indra/newview/llappviewer.cpp
# indra/newview/llfavoritesbar.cpp
# indra/newview/llfavoritesbar.h
# indra/newview/llfloaterimnearbychathandler.cpp
# indra/newview/llfloaterpreference.cpp
# indra/newview/llhudnametag.h
# indra/newview/llinventorypanel.cpp
# indra/newview/llinventorypanel.h
# indra/newview/llmeshrepository.cpp
# indra/newview/lloutfitgallery.cpp
# indra/newview/lloutfitslist.cpp
# indra/newview/llpaneleditwearable.cpp
# indra/newview/llpanelprofilepicks.cpp
# indra/newview/llpanelvoicedevicesettings.h
# indra/newview/llpreviewscript.cpp
# indra/newview/llpreviewscript.h
# indra/newview/llselectmgr.cpp
# indra/newview/lltranslate.cpp
# indra/newview/llviewerassetupload.cpp
# indra/newview/llviewermessage.cpp
|
|
|
|
DRTVWR-600-maint-A
# Conflicts:
# autobuild.xml
# indra/llrender/llfontbitmapcache.cpp
# indra/llrender/llfontbitmapcache.h
# indra/llrender/llfontfreetype.cpp
# indra/llrender/llfontfreetype.h
# indra/llrender/llfontgl.cpp
# indra/llrender/llfontgl.h
# indra/llui/llbutton.h
# indra/llui/llfloater.cpp
# indra/llui/llfloater.h
# indra/llui/llfolderviewitem.cpp
# indra/llui/lllineeditor.cpp
# indra/llui/lllineeditor.h
# indra/llui/llscrollcontainer.cpp
# indra/llui/llscrollingpanellist.cpp
# indra/llui/llscrollingpanellist.h
# indra/llui/llscrolllistctrl.h
# indra/llui/lltextbase.cpp
# indra/llui/lltextbase.h
# indra/llui/lltexteditor.cpp
# indra/llui/lltexteditor.h
# indra/llui/lluictrl.cpp
# indra/llui/llview.cpp
# indra/llui/llview.h
# indra/newview/llchicletbar.h
# indra/newview/llconversationlog.h
# indra/newview/llfloaterimsessiontab.cpp
# indra/newview/llfloaterimsessiontab.h
# indra/newview/llfloateruipreview.cpp
# indra/newview/llnavigationbar.h
# indra/newview/llpaneltopinfobar.h
# indra/newview/llpathfindingpathtool.h
# indra/newview/lltextureview.cpp
# indra/newview/lltoolbrush.h
# indra/newview/lltoolcomp.h
# indra/newview/lltooldraganddrop.h
# indra/newview/lltoolface.h
# indra/newview/lltoolfocus.h
# indra/newview/lltoolindividual.h
# indra/newview/lltoolobjpicker.h
# indra/newview/lltoolpie.h
# indra/newview/lltoolpipette.h
# indra/newview/lltoolselectland.h
# indra/newview/llviewermediafocus.h
# indra/newview/llviewerparcelmediaautoplay.h
# indra/newview/llviewerwindow.cpp
# indra/newview/llvoicechannel.h
# indra/newview/llvoicevivox.h
# indra/newview/llworldmapview.cpp
|
|
|
|
# Conflicts:
# indra/newview/llinventorygallery.cpp
|
|
|
|
Disable copy assignment operator as well as copy constructor.
Use std::uncaught_exceptions() in destructor to report whether there's an
in-flight exception at block exit. Since that was the whole point of the
DEBUGIN / DEBUGEND macros, those become obsolete. Ditch them and their
existing invocations.
|
|
debug.h #defines a couple of macros intended to enclose the entire body of a
function to track its entry and (possibly exceptional) exit. The trouble is
that these macros used to be called BEGIN and END, which is far too generic --
especially considering that END is used as an enum value in some parts of the
viewer.
Rename them DEBUGIN and DEBUGEND, which is ugly but unlikely to collide with
anything else.
|
|
Since print() writes to cerr, we used to be able to use it only in test
programs. Making the cerr writes conditional on LL_TEST allows us to use it
for debugging the code under test as well, since in the normal viewer the
cerr statements vanish.
|