@@ -770,6 +770,9 @@ Environment::Environment(IsolateData* isolate_data,
770770 inspector_host_port_ = std::make_shared<ExclusiveAccess<HostPort>>(
771771 options_->debug_options ().host_port );
772772
773+ heap_snapshot_near_heap_limit_ =
774+ static_cast <uint32_t >(options_->heap_snapshot_near_heap_limit );
775+
773776 if (!(flags_ & EnvironmentFlags::kOwnsProcessState )) {
774777 set_abort_on_uncaught_exception (false );
775778 }
@@ -884,9 +887,8 @@ Environment::~Environment() {
884887 // FreeEnvironment() should have set this.
885888 CHECK (is_stopping ());
886889
887- if (options_->heap_snapshot_near_heap_limit > heap_limit_snapshot_taken_) {
888- isolate_->RemoveNearHeapLimitCallback (Environment::NearHeapLimitCallback,
889- 0 );
890+ if (heapsnapshot_near_heap_limit_callback_added_) {
891+ RemoveHeapSnapshotNearHeapLimitCallback (0 );
890892 }
891893
892894 isolate ()->GetHeapProfiler ()->RemoveBuildEmbedderGraphCallback (
@@ -2029,8 +2031,7 @@ size_t Environment::NearHeapLimitCallback(void* data,
20292031 Debug (env,
20302032 DebugCategory::DIAGNOSTICS,
20312033 " Not generating snapshots because it's too risky.\n " );
2032- env->isolate ()->RemoveNearHeapLimitCallback (NearHeapLimitCallback,
2033- initial_heap_limit);
2034+ env->RemoveHeapSnapshotNearHeapLimitCallback (initial_heap_limit);
20342035 // The new limit must be higher than current_heap_limit or V8 might
20352036 // crash.
20362037 return current_heap_limit + 1 ;
@@ -2050,17 +2051,15 @@ size_t Environment::NearHeapLimitCallback(void* data,
20502051
20512052 // Remove the callback first in case it's triggered when generating
20522053 // the snapshot.
2053- env->isolate ()->RemoveNearHeapLimitCallback (NearHeapLimitCallback,
2054- initial_heap_limit);
2054+ env->RemoveHeapSnapshotNearHeapLimitCallback (initial_heap_limit);
20552055
20562056 heap::WriteSnapshot (env->isolate (), filename.c_str ());
20572057 env->heap_limit_snapshot_taken_ += 1 ;
20582058
20592059 // Don't take more snapshots than the number specified by
20602060 // --heapsnapshot-near-heap-limit.
2061- if (env->heap_limit_snapshot_taken_ <
2062- env->options_ ->heap_snapshot_near_heap_limit ) {
2063- env->isolate ()->AddNearHeapLimitCallback (NearHeapLimitCallback, env);
2061+ if (env->heap_limit_snapshot_taken_ < env->heap_snapshot_near_heap_limit_ ) {
2062+ env->AddHeapSnapshotNearHeapLimitCallback ();
20642063 }
20652064
20662065 FPrintF (stderr, " Wrote snapshot to %s\n " , filename.c_str ());
0 commit comments