Solve concurrency issue when setting up SCell measurement

This commit is contained in:
Xavier Arteaga 2021-05-28 15:29:31 +02:00 committed by Xavier Arteaga
parent 7185ec6beb
commit 93b35676e7
1 changed files with 36 additions and 31 deletions

View File

@ -249,6 +249,9 @@ void phy::configure_prach_params()
void phy::set_cells_to_meas(uint32_t earfcn, const std::set<uint32_t>& pci)
{
// As the SCell configuration is performed asynchronously through the cmd_worker, append the command adding the
// measurements to avoid a concurrency issue
cmd_worker.add_cmd([this, earfcn, pci]() {
// Check if the EARFCN matches with serving cell
uint32_t pcell_earfcn = 0;
sfsync.get_current_cell(nullptr, &pcell_earfcn);
@ -280,11 +283,13 @@ void phy::set_cells_to_meas(uint32_t earfcn, const std::set<uint32_t>& pci)
}
// Configure a the empty carrier as it was CA
logger_phy.info("Setting new SCell measurement cc_idx=%d, earfcn=%d, pci=%d...", cc_empty, earfcn, cell.id);
set_scell(cell, cc_empty, earfcn);
}
// Finally, set the serving cell measure
sfsync.set_cells_to_meas(earfcn, pci);
});
}
void phy::meas_stop()