Skip to content
Snippets Groups Projects
  • Nat Goodspeed's avatar
    27cadfbe
    DEV-40930: Introduce LLAppViewerListener "forceQuit" operation. · 27cadfbe
    Nat Goodspeed authored
    The bug was driven by the following sequence in llstartup.cpp:
                if(reason_response == "update"
                    || reason_response == "optional")
                {
                    // used to resend status event still containing "update",
                    // erroneously instantiating a second forced-update
                    // LLAlertDialog
                    LLLoginInstance::getInstance()->disconnect();
                    // quit with an LLAlertDialog still on sModalStack used
                    // to result in LL_ERRS
                    LLAppViewer::instance()->forceQuit();
                }
    I hope to be able to introduce a test script to verify the fix. That
    script would need to be able to call LLAppViewer::forceQuit() rather than
    requestQuit(), which is already available via LLAppViewerListener.
    
    At the same time, changed LLAppViewerListener to bind a functor to
    retrieve an LLAppViewer instance (namely LLAppViewer::instance) rather
    than an LLAppViewer*. Apparently the static instantiation of
    LLAppViewerListener was calling LLAppViewer::instance() too early, before
    things were ready, so the declaration was changed to pass NULL -- then
    in each method, call LLAppViewer::instance() if the bound pointer is NULL.
    Binding the LLAppViewer* is a Feathers tactic intended to avoid the need
    to reference the singleton. Binding a functor still leaves it up to the
    instantiating code to reference LLAppViewer::instance, while deferring
    the actual call to that method.
    27cadfbe
    History
    DEV-40930: Introduce LLAppViewerListener "forceQuit" operation.
    Nat Goodspeed authored
    The bug was driven by the following sequence in llstartup.cpp:
                if(reason_response == "update"
                    || reason_response == "optional")
                {
                    // used to resend status event still containing "update",
                    // erroneously instantiating a second forced-update
                    // LLAlertDialog
                    LLLoginInstance::getInstance()->disconnect();
                    // quit with an LLAlertDialog still on sModalStack used
                    // to result in LL_ERRS
                    LLAppViewer::instance()->forceQuit();
                }
    I hope to be able to introduce a test script to verify the fix. That
    script would need to be able to call LLAppViewer::forceQuit() rather than
    requestQuit(), which is already available via LLAppViewerListener.
    
    At the same time, changed LLAppViewerListener to bind a functor to
    retrieve an LLAppViewer instance (namely LLAppViewer::instance) rather
    than an LLAppViewer*. Apparently the static instantiation of
    LLAppViewerListener was calling LLAppViewer::instance() too early, before
    things were ready, so the declaration was changed to pass NULL -- then
    in each method, call LLAppViewer::instance() if the bound pointer is NULL.
    Binding the LLAppViewer* is a Feathers tactic intended to avoid the need
    to reference the singleton. Binding a functor still leaves it up to the
    instantiating code to reference LLAppViewer::instance, while deferring
    the actual call to that method.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.