Hoernchen has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-trx/+/36374?usp=email )
Change subject: ms: fix shutdown issues ...................................................................... ms: fix shutdown issues Queues got stuck when killing mobile during a transfer Change-Id: I02e668a55dece96e421c82706b76bbb411ea6712 --- M Transceiver52M/ms/itrq.h M Transceiver52M/ms/ms_rx_lower.cpp M Transceiver52M/ms/ms_trxcon_if.h M Transceiver52M/ms/ms_upper.cpp 4 files changed, 20 insertions(+), 5 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-trx refs/changes/74/36374/1 diff --git a/Transceiver52M/ms/itrq.h b/Transceiver52M/ms/itrq.h index 69ff515..3ce6700 100644 --- a/Transceiver52M/ms/itrq.h +++ b/Transceiver52M/ms/itrq.h @@ -34,7 +34,7 @@ std::condition_variable cond_r, cond_w; std::mutex lr, lw; std::atomic_int r_flag, w_flag; - const int timeout_ms = 200; + const int timeout_ms = 600; public: explicit spsc_cond_timeout_detail() : r_flag(0), w_flag(0) diff --git a/Transceiver52M/ms/ms_rx_lower.cpp b/Transceiver52M/ms/ms_rx_lower.cpp index b169dd8..3527a8b 100644 --- a/Transceiver52M/ms/ms_rx_lower.cpp +++ b/Transceiver52M/ms/ms_rx_lower.cpp @@ -54,6 +54,8 @@ #define PRINT_Q_OVERFLOW +extern std::atomic<bool> g_exit_flag; + bool ms_trx::decode_sch(char *bits, bool update_global_clock) { int fn; @@ -141,7 +143,7 @@ memcpy(brst.sch_bits, sch_demod_bits, sizeof(sch_demod_bits)); } - while (upper_is_ready && !rxqueue.spsc_push(&brst)) + while (!g_exit_flag && upper_is_ready && !rxqueue.spsc_push(&brst)) ; if (!use_agc) diff --git a/Transceiver52M/ms/ms_trxcon_if.h b/Transceiver52M/ms/ms_trxcon_if.h index 0928d40..14bdb4b 100644 --- a/Transceiver52M/ms/ms_trxcon_if.h +++ b/Transceiver52M/ms/ms_trxcon_if.h @@ -37,6 +37,6 @@ memcpy(buf, (void *)br->burst, br->burst_len); } }; -using tx_queue_t = spsc_cond<8 * 1, internal_q_tx_buf, true, false>; +using tx_queue_t = spsc_cond_timeout<8 * 1, internal_q_tx_buf, true, false>; using cmd_queue_t = spsc_cond_timeout<8 * 1, trxcon_phyif_cmd, true, false>; -using cmdr_queue_t = spsc_cond<8 * 1, trxcon_phyif_rsp, false, false>; +using cmdr_queue_t = spsc_cond_timeout<8 * 1, trxcon_phyif_rsp, false, false>; diff --git a/Transceiver52M/ms/ms_upper.cpp b/Transceiver52M/ms/ms_upper.cpp index af5bf82..c86029c 100644 --- a/Transceiver52M/ms/ms_upper.cpp +++ b/Transceiver52M/ms/ms_upper.cpp @@ -172,9 +172,11 @@ std::fill(workbuf, workbuf + workbuf_size, 0); // assert(sv.begin() == &workbuf[40]); - while (!rxqueue.spsc_pop(&e)) { + while (!rxqueue.spsc_pop(&e) && !g_exit_flag) { rxqueue.spsc_prep_pop(); } + if (g_exit_flag) + return false; wTime = e.gsmts; -- To view, visit https://gerrit.osmocom.org/c/osmo-trx/+/36374?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-trx Gerrit-Branch: master Gerrit-Change-Id: I02e668a55dece96e421c82706b76bbb411ea6712 Gerrit-Change-Number: 36374 Gerrit-PatchSet: 1 Gerrit-Owner: Hoernchen <ew...@sysmocom.de> Gerrit-MessageType: newchange