Skip to content

Commit 571bf57

Browse files
committed
reorder runtime subsystems deinitializations:
- move callbacks to the very begin - move instance cache and confdata to the very end
1 parent a3420db commit 571bf57

1 file changed

Lines changed: 9 additions & 5 deletions

File tree

runtime/interface.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2411,6 +2411,8 @@ static void free_interface_lib() {
24112411
}
24122412
uploaded_files_last_query_num--;
24132413
}
2414+
OnKphpWarningCallback::get().reset();
2415+
vk::singleton<OomHandler>::get().reset();
24142416
dl::leave_critical_section();
24152417
}
24162418

@@ -2432,16 +2434,12 @@ static void free_runtime_libs() {
24322434
free_udp_lib();
24332435
free_tcp_lib();
24342436
free_timelib();
2435-
OnKphpWarningCallback::get().reset();
24362437
kphp_tracing::free_tracing_lib();
24372438
free_slot_factories();
24382439
runtime_builtins_stats::reset_request_stats();
24392440

24402441
free_job_client_interface_lib();
24412442
free_job_server_interface_lib();
2442-
2443-
free_confdata_functions_lib();
2444-
free_instance_cache_lib();
24452443
free_kphp_backtrace();
24462444

24472445
free_use_updated_gmmktime();
@@ -2455,8 +2453,14 @@ static void free_runtime_libs() {
24552453
#endif
24562454
vk::singleton<database_drivers::Adaptor>::get().reset();
24572455
vk::singleton<curl_async::CurlAdaptor>::get().reset();
2458-
vk::singleton<OomHandler>::get().reset();
24592456
hard_reset_var(SerializationLibContext::get().last_json_processor_error);
2457+
2458+
// Confdata and InstanceCache MUST be freed at the very end
2459+
// They call force_destroy() on runtime primitives inside, which forcibly sets refcnt to zero
2460+
// It may lead to double free if someone tries to destroy such primitives after it
2461+
// (e.g. in case of destroying saved callbacks capturing objects from InstanceCache or Confdata)
2462+
free_confdata_functions_lib();
2463+
free_instance_cache_lib();
24602464
}
24612465

24622466
void global_init_runtime_libs() {

0 commit comments

Comments
 (0)