mirror of https://gitee.com/bigwinds/arangodb
Valgrind garbage collection shutdown fix attempt
This commit is contained in:
parent
780f791891
commit
14216e4ca5
|
@ -1449,10 +1449,20 @@ void ApplicationV8::shutdownV8Instance(size_t i) {
|
||||||
double availableTime = 30.0;
|
double availableTime = 30.0;
|
||||||
|
|
||||||
if (RUNNING_ON_VALGRIND) {
|
if (RUNNING_ON_VALGRIND) {
|
||||||
|
// running under Valgrind
|
||||||
availableTime *= 10;
|
availableTime *= 10;
|
||||||
}
|
int tries = 0;
|
||||||
|
|
||||||
TRI_RunGarbageCollectionV8(isolate, availableTime);
|
while (tries++ < 10 &&
|
||||||
|
TRI_RunGarbageCollectionV8(isolate, availableTime)) {
|
||||||
|
if (tries > 3) {
|
||||||
|
LOG_WARNING("waiting for garbage v8 collection to end");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TRI_RunGarbageCollectionV8(isolate, availableTime);
|
||||||
|
}
|
||||||
|
|
||||||
TRI_GET_GLOBALS();
|
TRI_GET_GLOBALS();
|
||||||
if (v8g != nullptr) {
|
if (v8g != nullptr) {
|
||||||
|
|
|
@ -4068,10 +4068,11 @@ static bool SingleRunGarbageCollectionV8(v8::Isolate* isolate,
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief run the V8 garbage collection for at most a specifiable amount of
|
/// @brief run the V8 garbage collection for at most a specifiable amount of
|
||||||
/// time
|
/// time. returns a boolean indicating whether or not the caller should attempt
|
||||||
|
/// to do more gc
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void TRI_RunGarbageCollectionV8(v8::Isolate* isolate, double availableTime) {
|
bool TRI_RunGarbageCollectionV8(v8::Isolate* isolate, double availableTime) {
|
||||||
int idleTimeInMs = 1000;
|
int idleTimeInMs = 1000;
|
||||||
|
|
||||||
if (availableTime >= 5.0) {
|
if (availableTime >= 5.0) {
|
||||||
|
@ -4097,7 +4098,7 @@ void TRI_RunGarbageCollectionV8(v8::Isolate* isolate, double availableTime) {
|
||||||
|
|
||||||
while (++gcTries <= gcAttempts) {
|
while (++gcTries <= gcAttempts) {
|
||||||
if (SingleRunGarbageCollectionV8(isolate, idleTimeInMs)) {
|
if (SingleRunGarbageCollectionV8(isolate, idleTimeInMs)) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4108,12 +4109,14 @@ void TRI_RunGarbageCollectionV8(v8::Isolate* isolate, double availableTime) {
|
||||||
// much CPU
|
// much CPU
|
||||||
if (++gcTries > gcAttempts ||
|
if (++gcTries > gcAttempts ||
|
||||||
SingleRunGarbageCollectionV8(isolate, idleTimeInMs)) {
|
SingleRunGarbageCollectionV8(isolate, idleTimeInMs)) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
usleep(100);
|
usleep(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -182,7 +182,7 @@ void TRI_normalize_V8_Obj(const v8::FunctionCallbackInfo<v8::Value>& args,
|
||||||
/// time
|
/// time
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void TRI_RunGarbageCollectionV8(v8::Isolate*, double);
|
bool TRI_RunGarbageCollectionV8(v8::Isolate*, double);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief clear the instance-local cache of wrapped objects
|
/// @brief clear the instance-local cache of wrapped objects
|
||||||
|
|
Loading…
Reference in New Issue