summaryrefslogtreecommitdiff
path: root/indra/newview/llappviewerwin32.cpp
AgeCommit message (Collapse)Author
2020-07-01SL-13361: Distill redundant create_console() code to set_stream().Nat Goodspeed
There are separate stanzas in llappviewerwin32.cpp's create_console() function for each of STD_INPUT_HANDLE, STD_OUTPUT_HANDLE and STD_ERROR_HANDLE. SL-13361 wants to add more code to each. Factor out new local set_stream() function and make create_console() call it three times. (cherry picked from commit 13b78a0c5a788c617866e3530c65dae616e6520f)
2020-03-25DRTVWR-476: Fix _open_osfhandle() param from long to intptr_t.Nat Goodspeed
The Microsoft _open_osfhandle() opens a HANDLE to produce a C-style int file descriptor suitable for passing to _fdopen(). We used to cast the HANDLEs returned by GetStdHandle() to long to pass to _open_osfhandle(). Since HANDLE is an alias for a pointer, this no longer works. Fortunately _open_osfhandle() now accepts intptr_t, so we can change the relevant GetStdHandle() calls. (But why not simply accept HANDLE in the first place?)
2020-03-24SL-1431 settings_per_account.xml file should be attached to crashreportMnikolenko Productengine
2019-09-25fix spurious per-frame warning about signal handlers in WindowsOz Linden
2019-06-12remove old crash logger moreOz Linden
2019-06-05SL-11362 not all special character work in command line parametersandreykproductengine
2019-06-05assorted cleanupOz Linden
2018-12-05DRTVWR-447: Fix BugSplat init with non-ASCII chars in install path.Nat Goodspeed
The whole remaining difference between llifstream and std::ifstream is that the former handles UTF-8 coded pathnames. Microsoft's implementation of the latter does not.
2018-11-14Automated merge with ssh://bitbucket.org/lindenlab/viewer-releaseNat Goodspeed
2018-09-27mergeBrad Payne (Vir Linden)
2018-09-26Automated merge with ssh://bitbucket.org/lindenlab/viewer-releaseNat Goodspeed
2018-08-29SL-967 simplify viewer log file field syntaxOz Linden
MAINT-8991: only escape log message characters once, add unit test remove extra log line created by LL_ERRS document that tags may not contain spaces
2018-08-21DRTVWR-447: Add static_debug_info.log file to Windows crash report.Nat Goodspeed
Also use the LLOSInfo information for platform rather than simply Windows32 or Windows64.
2018-07-14DRTVWR-447: Revert BugSplat diagnostic logging; add platform tag.Nat Goodspeed
2018-07-12DRTVWR-447: For want of a 'const', the build was lost.Nat Goodspeed
2018-07-12DRTVWR-447: More diagnostic logging for BugSplat metadata strings.Nat Goodspeed
2018-07-11DRTVWR-447: Diagnostically try naively widening BugSplat metadata.Nat Goodspeed
2018-07-11DRTVWR-447: Fix silly typosNat Goodspeed
2018-07-11DRTVWR-447: Add more diagnostic logging to Windows BugSplat crash.Nat Goodspeed
2018-07-10SL-932: Attach user's settings.xml file to Windows crash reports.Nat Goodspeed
It is not obvious whether the BugsplatMac attachment API even supports multiple file attachments. I've contacted BugSplat support.
2018-06-28DRTVWR-447: Suppress BugSplat UI; auto-fill certain BugSplat data.Nat Goodspeed
Direct BugSplat to send crash reports without prompting, on both Windows and Mac. Add a mechanism by which code called after LL_ERRS() can retrieve the fatal log message string. (How did the crash logger extract that for Linden crash logging?) Add that fatal message to crash reports on Windows. But as BugsplatMac is engaged only on the run _after_ the crash, we no longer have that message in memory. Also add user name and region location to Windows crash reports. On Mac, (a) we don't have the information from the previous run and (b) BugsplatMac doesn't provide an API to attach that information to the crash report. Add Mac logging to indicate the success or failure of sending the crash report. Add Windows logging to indicate we're about to send.
2018-06-28MAINT-8797: Resurrect BugSplat crash reporting on Windows.Nat Goodspeed
The Breakpad symbol-file upload in the viewer's build.sh was failing on BugSplat builds since we weren't generating Breakpad symbol files. That upload was conditional on RELEASE_CRASH_REPORTING, so my first approach was to set RELEASE_CRASH_REPORTING=OFF for BugSplat builds. Unfortunately that symbol also propagates down into C++ compiles, and in llappviewerwin32.cpp, both Breakpad and BugSplat crash reporting is conditional on it. So that change inadvertently turned off the C++ logic to engage BugSplat. Stop forcing RELEASE_CRASH_REPORTING=OFF for BugSplat builds. Instead, make the Breakpad symbol-file upload check the BUGSPLAT_DB variable as well. Add #pragma messages to llappviewerwin32.cpp so we can detect whether it's being built for Breakpad or BugSplat or neither.
2018-06-15SL-820: gDirUtilp is never nullptr.Nat Goodspeed
It might point to an uninitialized LLDir, but that's a whole separate problem, one that wouldn't be detected by checking for nullptr. If we hit that, time to change to an LLSingleton.
2018-05-26Automated merge with ssh://bitbucket.org/lindenlab/viewer-bugsplatNat Goodspeed
2018-05-26SL-823: Fix typo in code that sets up BugSplat.Nat Goodspeed
2018-05-25SL-823: Fix minor compile errors in code to read build_data.json.Nat Goodspeed
2018-05-25SL-821, SL-826: Use BUGSPLAT_DB from environment on Windows and Mac.Nat Goodspeed
On TeamCity, set BUGSPLAT_DB from build-secrets. Use the presence of $BUGSPLAT_DB, rather than a new CMake BUGSPLAT option, to control whether CMake searches for BugSplat -- and passes LL_BUGSPLAT into C++. When BUGSPLAT_DB is present, make viewer_manifest.py set "BugSplat DB" in build_data.json, and "BugsplatServerURL" in Mac Info.plist. Make llappviewerwin32.cpp read "BugSplat DB" from build_data.json. Add placeholders for Mac hooks to suppress BugSplat prompt and send SecondLife.log.
2018-05-17SL-821: Use classic-C BugSplat callback and static dumb pointer.Nat Goodspeed
BugSplat has no business introducing a new C++ API based on classic-C function pointers without even a generic pass-through user data pointer!
2018-05-17SL-821: Convert wstrings to strings of __wchar_t for BugSplat API.Nat Goodspeed
2018-05-17SL-821: Move Windows BugSplat engagement from llcommon to newview.Nat Goodspeed
Use WSTRINGIZE(), LL_TO_WSTRING(), wstringize() to produce required wide strings. Use a lambda for callback that sends log file; use LLDir, if set, to find the log file. Introduce BUGSPLAT CMake variable to allow suppressing BugSplat. Make BUGSPLAT CMake variable set LL_BUGSPLAT for C++ compilations. Set viewer version macros on llappviewerwin32.cpp, llappviewerlinux.cpp and llappdelegate-objc.mm -- because BugSplat needs the viewer version data, and because the macOS BugSplat hook is engaged in an Objective-C++ function we override in the app delegate.
2018-01-19Skip warning about direct launch of viewer if running under debugger. ↵Brad Payne (Vir Linden)
Currently this check should work on windows and linux.
2017-10-11Automated merge with ssh://bitbucket.org/lindenlab/viewer-releaseNat Goodspeed
2017-09-06MAINT-7691 Fixed crash report not generating files in unicode named foldersandreykproductengine
2017-08-31MAINT-7691 Crashreported sometimes not starting from unicode named foldersandreykproductengine
2017-05-05pull from gatecoyot@coyot-sager-PC.hsd1.ca.comcast.net
2017-04-27DRTVWR-418: Use conventional LLSingleton init/cleanup for LLWinDebug.Nat Goodspeed
LLWinDebug, though an LLSingleton, had (and required explicit calls to) special init() and cleanup() methods. Kitty Barnett points out that the cleanup() method was actually being called after LLSingletonBase::deleteAll(), requiring resurrection of the deleted LLWinDebug, which sometimes led to crashes. (Resurrecting deleted LLSingletons is always suspect.) Change LLWinDebug::init() and cleanup() to the conventional initSingleton() and cleanupSingleton() methods. This eliminates the need to make special method calls at all. In particular, cleanupSingleton() will be called by the existing LLSingletonBase::cleanupAll() call near viewer shutdown. We retain the early LLWinDebug::instance() call, which implicitly initializes the LLWinDebug instance, because evidently we want that initialized early. But we no longer require a separate init() call.
2017-02-28mergecoyot@coyot-sager-PC
2016-10-10Merged in lindenlab/viewer-releaseAndreyL ProductEngine
2016-08-26MAINT-5011: Fix misleading indentation in WINMAIN().Nat Goodspeed
2016-08-18SL-323: first pass at ripping out old updaterGlenn Glazer
2016-08-18MAINT-5992 Second Life unusable on Windows 10 with 4k monitor SL forcibly ↵pavelkproductengine
overrides DPI compatibility option
2016-06-30DRTVWR-418: Unify control flow through LLAppViewer across platforms.Nat Goodspeed
The LLApp API used to consist of init(), mainLoop(), cleanup() methods. This makes sense -- but on Mac that structure was being subverted. The method called mainLoop() was in fact being called once per frame. There was initialization code in the method, which (on Mac) needed to be skipped with an already-initialized bool. There was a 'while' loop which (on Mac) needed to be turned into an 'if' instead so the method would return after every frame. Rename LLApp::mainLoop() to frame(). Propagate through subclasses LLAppViewer and LLCrashLogger. Document the fact that frame() returns true to mean "done." (This was always the case, but had to be inferred from the code.) Rename the Mac Objective-C function mainLoop to oneFrame. Rename the C++ free function it calls from runMainLoop() to pumpMainLoop(). Add comments to llappdelegate-objc.mm explaining (inferred) control flow. Change the Linux viewer main() and the Windows viewer WINMAIN() from a single LLAppViewer::mainLoop() call to repeatedly call frame() until it returns true. Move initialization code from the top of LLAppViewer::frame() to the init() method, where it more properly belongs. Remove corresponding mMainLoopInitialized flag (and all references) from LLAppViewer. Remove 'while (! LLApp::isExiting())' (or on Mac, 'if (! LLApp::isExiting())') from LLAppViewer::frame() -- thus unindenting the whole body of the 'while' and causing many lines of apparent change. (Apologies to reviewers.) There are four LLApp states: APP_STATUS_RUNNING, APP_STATUS_QUITTING, APP_STATUS_STOPPED and APP_STATUS_ERROR. Change LLAppViewer::frame() return value from (isExiting()) (QUITTING or ERROR) to (! isRunning()). I do not know under what circumstances the state might transition to STOPPED during a frame() call, but I'm quite sure that if it does, we don't want to call frame() again. We only want a subsequent call if the state is RUNNING. Also rename mainLoop() method in LLCrashLogger subclasses LLCrashLoggerWindows, LLCrashLoggerMac, LLCrashLoggerLinux. Of course it's completely up to the frame() method whether to yield control; none of those in fact do. Honor protocol by returning true (frame() is done), even though each one's main() caller ignores the return value. In fact LLCrashLoggerWindows::mainLoop() wasn't using the return protocol correctly anyway, returning wParam or 0 or 1 -- possibly because the return protocol was never explicitly documented. It should always return true: "I'm done, don't call me again."
2016-05-02Fixed disabling of Windows error reportingAnsariel
2014-04-23MAINT-4009: Freeing the allocated console during shutdown.Stinson Linden
2014-04-23MAINT-4009: Adding LLWinDebug::cleanup() to ensure memory is freed at app end.Stinson Linden
2014-04-22MergeXiaohong Bao
2014-04-14Fix for MAINT-5707 bad breakpad behavior with teleport linksAura Linden
2014-04-07merge with releaseRichard Linden
2014-03-13Merged in viewer-releaseAura Linden
2014-03-12merge with releaseRichard Linden