mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-04 12:58:41 +00:00
eliminate incorrect cases of async_push_work, where pushes which could occur on worker threads may try to write to a cache that is currently being held, when the push occurs (when all threads are saturated) - async_push_work must never be called from within a cache locking mechanism
This commit is contained in:
+8
-2
@@ -493,7 +493,10 @@ di_open(DI_Key *key)
|
||||
di_u2p_enqueue_key(&key_normalized, max_U64);
|
||||
ins_atomic_u64_eval_assign(&node->last_time_requested_us, os_now_microseconds());
|
||||
ins_atomic_u64_inc_eval(&node->request_count);
|
||||
async_push_work(di_parse_work, .completion_counter = &node->completion_count);
|
||||
DeferLoop(os_rw_mutex_drop_w(stripe->rw_mutex), os_rw_mutex_take_w(stripe->rw_mutex))
|
||||
{
|
||||
async_push_work(di_parse_work, .completion_counter = &node->completion_count);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -616,7 +619,10 @@ di_rdi_from_key(DI_Scope *scope, DI_Key *key, U64 endt_us)
|
||||
{
|
||||
ins_atomic_u64_eval_assign(&node->last_time_requested_us, os_now_microseconds());
|
||||
ins_atomic_u64_inc_eval(&node->request_count);
|
||||
async_push_work(di_parse_work, .completion_counter = &node->completion_count);
|
||||
DeferLoop(os_rw_mutex_drop_w(stripe->rw_mutex), os_rw_mutex_take_w(stripe->rw_mutex))
|
||||
{
|
||||
async_push_work(di_parse_work, .completion_counter = &node->completion_count);
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: time expired -> break
|
||||
|
||||
Reference in New Issue
Block a user