• Konstantinos Alexandris's avatar
    bugfix: fix realtime issues with RRC (race condition) · eb59c2cd
    Konstantinos Alexandris authored
    When testing x2 handover, we found a race issue between the
    RRC thread and the phy/mac thread (which is calling rrc_rx_tx).
    
    The UE context was updated by the RRC thread but in the middle of
    the update (which consists of several function calls and variables'
    updates) the context was accessed by rrc_rx_tx. At this point, the
    context was in an inconsistent state.
    
    The solution is to access RRC data in the RRC thread only.
    The function rrc_rx_tx now just sends an ITTI message to the
    RRC thread. When receiving this message, the RRC thread does
    the processing that was done by the function rrc_rx_tx (in
    the new function rrc_subframe_process).
    
    This way, the race condition disappears.
    
    However we now send an ITTI message from the phy/mac thread to
    the RRC thread at each subframe. That might increase the processing
    time of the eNB. So maybe it's not the best solution. It may also
    improve the realtime performance because less work is done by the
    phy/mac realtime thread. To be checked somehow.
    
    Also, it may be possible that some other RRC functions are still
    called by the phy/mac thread, which should also be checked and
    replaced by ITTI messages (if this solution is considered to be
    correct).
    eb59c2cd
rrc_eNB.c 456 KB