mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-30 19:30:35 +05:00
PAL16774,PAL16631(SALOME crash after a mesh computation that failed because of lack of memory)
- bool CheckMemory() + int CheckMemory() - return size of free memory
This commit is contained in:
parent
9cfa837a1d
commit
7ff996b8f5
@ -46,27 +46,34 @@ using namespace std;
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief Raise an exception if free memory (ram+swap) too low
|
||||
* \param doNotRaise - if true, suppres exception, just return bool
|
||||
* \retval bool - true if there is enough memory
|
||||
* \param doNotRaise - if true, suppres exception, just return free memory size
|
||||
* \retval int - amount of available memory in MB or negative number in failure case
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
bool SMDS_Mesh::CheckMemory(const bool doNotRaise) throw (std::bad_alloc)
|
||||
int SMDS_Mesh::CheckMemory(const bool doNotRaise) throw (std::bad_alloc)
|
||||
{
|
||||
#ifndef WIN32
|
||||
struct sysinfo si;
|
||||
int err = sysinfo( &si );
|
||||
if ( err )
|
||||
return true;
|
||||
|
||||
int freeMbyte = ( si.freeram + si.freeswap ) * si.mem_unit / 1024 / 1024;
|
||||
if ( freeMbyte > 4 )
|
||||
return true;
|
||||
return -1;
|
||||
|
||||
const unsigned long Mbyte = 1024 * 1024;
|
||||
// compute separately to avoid overflow
|
||||
int freeMb =
|
||||
( si.freeram * si.mem_unit ) / Mbyte +
|
||||
( si.freeswap * si.mem_unit ) / Mbyte;
|
||||
|
||||
if ( freeMb > 4 )
|
||||
return freeMb;
|
||||
|
||||
if ( doNotRaise )
|
||||
return false;
|
||||
return 0;
|
||||
cout<<"SMDS_Mesh::CheckMemory() throws std::bad_alloc() as freeMb="<<freeMb<<endl;
|
||||
throw std::bad_alloc();
|
||||
#else
|
||||
return true;
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -484,10 +484,10 @@ public:
|
||||
|
||||
/*!
|
||||
* \brief Raise an exception if free memory (ram+swap) too low
|
||||
* \param doNotRaise - if true, suppres exception, just return bool
|
||||
* \retval bool - true if there is enough memory
|
||||
* \param doNotRaise - if true, suppres exception, just return free memory size
|
||||
* \retval int - amount of available memory in MB or negative number in failure case
|
||||
*/
|
||||
static bool CheckMemory(const bool doNotRaise=false) throw (std::bad_alloc);
|
||||
static int CheckMemory(const bool doNotRaise=false) throw (std::bad_alloc);
|
||||
|
||||
int MaxNodeID() const;
|
||||
int MinNodeID() const;
|
||||
|
Loading…
Reference in New Issue
Block a user