srsue,mac: do not destroy active dl_harq_proc during a reconfiguration

master
Ismael Gomez 3 years ago
parent 12435eae7d
commit 496b8e2748

@ -26,6 +26,14 @@ dl_harq_entity_nr::dl_harq_entity_nr(uint8_t cc_idx_,
// Init broadcast HARQ process // Init broadcast HARQ process
bcch_proc.init(-1); bcch_proc.init(-1);
pthread_rwlock_init(&rwlock, NULL); pthread_rwlock_init(&rwlock, NULL);
// Create default number of processes
for (uint32_t i = 0; i < cfg.nof_procs; i++) {
harq_procs[i] = std::unique_ptr<dl_harq_process_nr>(new dl_harq_process_nr(this));
if (!harq_procs.at(i)->init(i)) {
logger.error("Error while initializing DL-HARQ process %d", i);
}
}
} }
dl_harq_entity_nr::~dl_harq_entity_nr() dl_harq_entity_nr::~dl_harq_entity_nr()
@ -42,19 +50,21 @@ int32_t dl_harq_entity_nr::set_config(const srsran::dl_harq_cfg_nr_t& cfg_)
return SRSRAN_ERROR; return SRSRAN_ERROR;
} }
// clear old processees if (cfg_.nof_procs < cfg.nof_procs) {
for (auto& proc : harq_procs) { // clear old processes if not needed
proc = nullptr; for (uint32_t i = cfg.nof_procs - 1; i < cfg_.nof_procs; i++) {
harq_procs[i] = nullptr;
} }
} else {
// Allocate and init configured HARQ processes // Add new processes
for (uint32_t i = 0; i < cfg.nof_procs; i++) { for (uint32_t i = cfg.nof_procs; i < cfg_.nof_procs; i++) {
harq_procs[i] = std::unique_ptr<dl_harq_process_nr>(new dl_harq_process_nr(this)); harq_procs[i] = std::unique_ptr<dl_harq_process_nr>(new dl_harq_process_nr(this));
if (!harq_procs.at(i)->init(i)) { if (!harq_procs.at(i)->init(i)) {
logger.error("Error while initializing DL-HARQ process %d", i); logger.error("Error while initializing DL-HARQ process %d", i);
return SRSRAN_ERROR; return SRSRAN_ERROR;
} }
} }
}
cfg = cfg_; cfg = cfg_;

Loading…
Cancel
Save