#1500 Better out of disk space handling

master
Alexander Gavriliuk 2024-07-14 12:01:30 +02:00 committed by Guru
parent 88f52f1b90
commit ef9a494134
6 changed files with 55 additions and 1 deletions

View File

@ -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()
{

View File

@ -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];

View File

@ -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;
}

View File

@ -3067,6 +3067,13 @@ bool LLAppViewer::meetsRequirementsForMaximizedStart()
return maximizedOk;
}
// virtual
void LLAppViewer::sendOutOfDiskSpaceNotification()
{
LL_WARNS() << "Out of disk space notification requested" << LL_ENDL;
LLNotificationsUtil::add("OutOfDiskSpace");
}
bool LLAppViewer::initWindow()
{
LL_INFOS("AppInit") << "Initializing window..." << LL_ENDL;

View File

@ -245,6 +245,8 @@ protected:
virtual bool meetsRequirementsForMaximizedStart(); // Used on first login to decide to launch maximized
virtual void sendOutOfDiskSpaceNotification();
private:
bool doFrame();

View File

@ -3031,6 +3031,15 @@ This is usually a temporary failure. Please customize and save the wearable agai
<tag>fail</tag>
</notification>
<notification
icon="notifytip.tga"
name="OutOfDiskSpace"
type="notifytip">
The system is out of disk space. You will need to free up some space on your computer or clear the cache.
<tag>fail</tag>
<unique/>
</notification>
<notification
icon="alertmodal.tga"
name="YouHaveBeenLoggedOut"