Fix reestablishment mutex lock when called from RLC max retx

master
Ismael Gomez 6 years ago
parent 63794aa2dc
commit 9e6a9e0d03

@ -473,7 +473,8 @@ private:
bool go_idle; bool go_idle;
asn1::rrc::reest_cause_e m_reest_cause; asn1::rrc::reest_cause_e m_reest_cause;
uint16_t m_reest_rnti; uint16_t m_reest_rnti;
bool reestablishment_successful; bool reestablishment_started = false;
bool reestablishment_successful = false;
uint32_t rlc_flush_counter; uint32_t rlc_flush_counter;
uint32_t rlc_flush_timeout; uint32_t rlc_flush_timeout;

@ -591,7 +591,7 @@ void rrc::new_phy_meas(float rsrp, float rsrq, uint32_t tti, int earfcn_i, int p
} }
phy_meas_t new_meas = {rsrp, rsrq, tti, earfcn, pci}; phy_meas_t new_meas = {rsrp, rsrq, tti, earfcn, pci};
phy_meas_q.push(new_meas); phy_meas_q.push(new_meas);
rrc_log->info("MEAS: New measurement pci=%d, rsrp=%.1f dBm.\n", pci, rsrp); rrc_log->info("MEAS: New measurement pci=%d (%s), rsrp=%.1f dBm.\n", pci, pci_i < 0 ? "serving" : "neighbour", rsrp);
} }
/* Processes all pending PHY measurements in queue. Must be called from a mutexed function /* Processes all pending PHY measurements in queue. Must be called from a mutexed function
@ -1778,10 +1778,27 @@ void rrc::init_con_restablish_request(asn1::rrc::reest_cause_e cause)
// Save reestablishment cause and current C-RNTI // Save reestablishment cause and current C-RNTI
m_reest_rnti = uernti.crnti; m_reest_rnti = uernti.crnti;
m_reest_cause = cause; m_reest_cause = cause;
reestablishment_started = false;
// initiation of reestablishment procedure as indicates in 3GPP 36.331 Section 5.3.7.2 // initiation of reestablishment procedure as indicates in 3GPP 36.331 Section 5.3.7.2
rrc_log->info("Initiating RRC Connection Reestablishment Procedure\n"); rrc_log->info("Initiating RRC Connection Reestablishment Procedure\n");
rrc_log->console("Initiating RRC Connection Reestablishment Procedure\n"); } else {
// 3GPP 36.331 Section 5.3.7.1
// If AS security has not been activated, the UE does not initiate the procedure but instead
// moves to RRC_IDLE directly
go_idle = true;
}
}
/* Implementation of procedure in 3GPP 36.331 Section 5.3.7.3: Actions following cell selection while T311 is running
*/
void rrc::proc_con_restablish_request()
{
if (!reestablishment_started) {
reestablishment_started = true;
rrc_log->info("Resetting timers and MAC in RRC Connection Reestablishment Procedure\n");
// stop timer T310, if running; // stop timer T310, if running;
mac_timers->timer_get(t310)->stop(); mac_timers->timer_get(t310)->stop();
@ -1807,18 +1824,8 @@ void rrc::init_con_restablish_request(asn1::rrc::reest_cause_e cause)
// perform cell selection in accordance with the cell selection process as specified in TS 36.304 [4]; // perform cell selection in accordance with the cell selection process as specified in TS 36.304 [4];
// ... this happens in rrc::run_tti() // ... this happens in rrc::run_tti()
} else {
// 3GPP 36.331 Section 5.3.7.1
// If AS security has not been activated, the UE does not initiate the procedure but instead
// moves to RRC_IDLE directly
go_idle = true;
}
} }
/* Implementation of procedure in 3GPP 36.331 Section 5.3.7.3: Actions following cell selection while T311 is running
*/
void rrc::proc_con_restablish_request()
{
// Check timer... // Check timer...
if (mac_timers->timer_get(t311)->is_running()) { if (mac_timers->timer_get(t311)->is_running()) {
// Check for synchronism // Check for synchronism

Loading…
Cancel
Save