eMBMS: pushing bsr update to task queue to avoid potential deadlock

master
yagoda 2 years ago committed by Justin Tallon
parent 5240083454
commit 07d1f14fab

@ -130,17 +130,20 @@ void mac::start_pcap_net(srsran::mac_pcap_net* pcap_net_)
int mac::rlc_buffer_state(uint16_t rnti, uint32_t lc_id, uint32_t tx_queue, uint32_t retx_queue) int mac::rlc_buffer_state(uint16_t rnti, uint32_t lc_id, uint32_t tx_queue, uint32_t retx_queue)
{ {
srsran::rwlock_read_guard lock(rwlock);
int ret = -1; int ret = -1;
if (check_ue_active(rnti)) { if (check_ue_active(rnti)) {
if (rnti != SRSRAN_MRNTI) { if (rnti != SRSRAN_MRNTI) {
srsran::rwlock_write_guard lock(rwlock);
ret = scheduler.dl_rlc_buffer_state(rnti, lc_id, tx_queue, retx_queue); ret = scheduler.dl_rlc_buffer_state(rnti, lc_id, tx_queue, retx_queue);
} else { } else {
for (uint32_t i = 0; i < mch.num_mtch_sched; i++) { task_sched.defer_callback(0, [this, tx_queue, lc_id]() {
if (lc_id == mch.mtch_sched[i].lcid) { srsran::rwlock_write_guard lock(rwlock);
mch.mtch_sched[i].lcid_buffer_size = tx_queue; for (uint32_t i = 0; i < mch.num_mtch_sched; i++) {
if (lc_id == mch.mtch_sched[i].lcid) {
mch.mtch_sched[i].lcid_buffer_size = tx_queue;
}
} }
} });
ret = 0; ret = 0;
} }
} }

Loading…
Cancel
Save