@@ -80,6 +80,9 @@ int64_t MemInfo::_s_sys_mem_available_low_water_mark = -1;
80
80
int64_t MemInfo::_s_sys_mem_available_warning_water_mark = -1 ;
81
81
int64_t MemInfo::_s_process_minor_gc_size = -1 ;
82
82
int64_t MemInfo::_s_process_full_gc_size = -1 ;
83
+ std::mutex MemInfo::je_purge_dirty_pages_lock;
84
+ std::condition_variable MemInfo::je_purge_dirty_pages_cv;
85
+ std::atomic<bool > MemInfo::je_purge_dirty_pages_notify {false };
83
86
84
87
void MemInfo::refresh_allocator_mem () {
85
88
#if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER) || defined(THREAD_SANITIZER)
@@ -129,7 +132,7 @@ bool MemInfo::process_minor_gc() {
129
132
std::string pre_sys_mem_available = MemInfo::sys_mem_available_str ();
130
133
131
134
Defer defer {[&]() {
132
- je_purge_all_arena_dirty_pages ();
135
+ notify_je_purge_dirty_pages ();
133
136
std::stringstream ss;
134
137
profile->pretty_print (&ss);
135
138
LOG (INFO) << fmt::format (
@@ -139,7 +142,7 @@ bool MemInfo::process_minor_gc() {
139
142
}};
140
143
141
144
freed_mem += CacheManager::instance ()->for_each_cache_prune_stale (profile.get ());
142
- je_purge_all_arena_dirty_pages ();
145
+ notify_je_purge_dirty_pages ();
143
146
if (freed_mem > _s_process_minor_gc_size) {
144
147
return true ;
145
148
}
@@ -180,7 +183,7 @@ bool MemInfo::process_full_gc() {
180
183
std::string pre_sys_mem_available = MemInfo::sys_mem_available_str ();
181
184
182
185
Defer defer {[&]() {
183
- je_purge_all_arena_dirty_pages ();
186
+ notify_je_purge_dirty_pages ();
184
187
std::stringstream ss;
185
188
profile->pretty_print (&ss);
186
189
LOG (INFO) << fmt::format (
@@ -190,7 +193,7 @@ bool MemInfo::process_full_gc() {
190
193
}};
191
194
192
195
freed_mem += CacheManager::instance ()->for_each_cache_prune_all (profile.get ());
193
- je_purge_all_arena_dirty_pages ();
196
+ notify_je_purge_dirty_pages ();
194
197
if (freed_mem > _s_process_full_gc_size) {
195
198
return true ;
196
199
}
0 commit comments