diff options
| author | Alexander Gavriliuk <alexandrgproductengine@lindenlab.com> | 2024-07-14 12:01:30 +0200 | 
|---|---|---|
| committer | Guru <alexandrgproductengine@lindenlab.com> | 2024-07-18 09:42:59 +0200 | 
| commit | ef9a494134458f3464b250c87da9e247d775989c (patch) | |
| tree | 12bc85b249dbc9a16afe3d4ded58983f4c154ed0 /indra/llcommon | |
| parent | 88f52f1b90af1813dc70525f2e08b16cc5939af5 (diff) | |
#1500 Better out of disk space handling
Diffstat (limited to 'indra/llcommon')
| -rw-r--r-- | indra/llcommon/llapp.cpp | 27 | ||||
| -rw-r--r-- | indra/llcommon/llapp.h | 4 | ||||
| -rw-r--r-- | indra/llcommon/llapr.cpp | 7 | 
3 files changed, 37 insertions, 1 deletions
| diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp index b85bd2573b..c2158bb5b8 100644 --- a/indra/llcommon/llapp.cpp +++ b/indra/llcommon/llapp.cpp @@ -487,6 +487,33 @@ int LLApp::getPid()  #endif  } +// static +void LLApp::notifyOutOfDiskSpace() +{ +    static const U32Seconds min_interval = U32Seconds(60); +    static U32Seconds min_time_to_send = U32Seconds(0); +    U32Seconds now = LLTimer::getTotalTime(); +    if (now < min_time_to_send) +        return; + +    min_time_to_send = now + min_interval; + +    if (LLApp* app = instance()) +    { +        app->sendOutOfDiskSpaceNotification(); +    } +    else +    { +        LL_WARNS() << "No app instance" << LL_ENDL; +    } +} + +// virtual +void LLApp::sendOutOfDiskSpaceNotification() +{ +    LL_WARNS() << "Should never be called" << LL_ENDL; // Should be overridden +} +  #ifndef LL_WINDOWS  void setup_signals()  { diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h index ad8912ca88..d90ecdf661 100644 --- a/indra/llcommon/llapp.h +++ b/indra/llcommon/llapp.h @@ -202,6 +202,8 @@ public:      static bool isExiting(); // Either quitting or error (app is exiting, cleanly or not)      static int getPid(); +    static void notifyOutOfDiskSpace(); +      //      // Sleep for specified time while still running      // @@ -301,6 +303,8 @@ protected:        */      void stepFrame(); +    virtual void sendOutOfDiskSpaceNotification(); +  private:      // Contains the filename of the minidump file after a crash.      char mMinidumpPath[MAX_MINDUMP_PATH_LENGTH]; diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp index b085f8f5dc..01763c49aa 100644 --- a/indra/llcommon/llapr.cpp +++ b/indra/llcommon/llapr.cpp @@ -28,6 +28,7 @@  #include "linden_common.h"  #include "llapr.h" +#include "llapp.h"  #include "llmutex.h"  #include "apr_dso.h" @@ -606,7 +607,11 @@ S32 LLAPRFile::writeEx(const std::string& filename, const void *buf, S32 offset,          apr_status_t s = apr_file_write(file_handle, buf, &bytes_written);          if (s != APR_SUCCESS)          { -            LL_WARNS("APR") << " Attempting to write filename: " << filename << LL_ENDL; +            LL_WARNS("APR") << "Attempting to write filename: " << filename << LL_ENDL; +            if (APR_STATUS_IS_ENOSPC(s)) +            { +                LLApp::notifyOutOfDiskSpace(); +            }              ll_apr_warn_status(s);              bytes_written = 0;          } | 
