diff --git a/executables/nr-ue.c b/executables/nr-ue.c index fc9debee2b..975d8ea26e 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -829,6 +829,7 @@ void *UE_thread(void *arg) if (start_rx_stream == 0) { start_rx_stream=1; syncInFrame(UE, &sync_timestamp, intialSyncOffset); + openair0_write_reorder_clear_context(&UE->rfdevice); shiftForNextFrame = 0; // will be used to track clock drift // read in first symbol AssertFatal(UE->frame_parms.ofdm_symbol_size + UE->frame_parms.nb_prefix_samples0 diff --git a/radio/COMMON/common_lib.c b/radio/COMMON/common_lib.c index 51d359bdbf..a386d3a9bd 100644 --- a/radio/COMMON/common_lib.c +++ b/radio/COMMON/common_lib.c @@ -269,3 +269,20 @@ int openair0_write_reorder(openair0_device *device, openair0_timestamp timestamp } return nsamps; } + +void openair0_write_reorder_clear_context(openair0_device *device) +{ + LOG_I(HW, "received write reorder clear context\n"); + re_order_t *ctx = &device->reOrder; + if (!ctx->initDone) + return; + if (pthread_mutex_trylock(&ctx->mutex_write) == 0) + LOG_E(HW, "write_reorder_clear_context call while still writing on the device\n"); + pthread_mutex_destroy(&ctx->mutex_write); + pthread_mutex_lock(&ctx->mutex_store); + for (int i = 0; i < WRITE_QUEUE_SZ; i++) + ctx->queue[i].active = false; + pthread_mutex_unlock(&ctx->mutex_store); + pthread_mutex_destroy(&ctx->mutex_store); + ctx->initDone = false; +} diff --git a/radio/COMMON/common_lib.h b/radio/COMMON/common_lib.h index 074007dd10..0ff54a79ce 100644 --- a/radio/COMMON/common_lib.h +++ b/radio/COMMON/common_lib.h @@ -671,7 +671,7 @@ extern int read_recplayconfig(recplay_conf_t **recplay_conf, recplay_state_t **r extern void iqrecorder_end(openair0_device *device); int openair0_write_reorder(openair0_device *device, openair0_timestamp timestamp, void **txp, int nsamps, int nbAnt, int flags); - +void openair0_write_reorder_clear_context(openair0_device *device); #include #ifndef gettid #define gettid() syscall(__NR_gettid)