diff --git a/lib/include/srslte/common/buffer_pool.h b/lib/include/srslte/common/buffer_pool.h index 1895c8330..eee04caa8 100644 --- a/lib/include/srslte/common/buffer_pool.h +++ b/lib/include/srslte/common/buffer_pool.h @@ -93,6 +93,10 @@ public: #endif } + uint32_t nof_available_pdus() { + return available.size(); + } + bool is_almost_empty() { return available.size() < capacity/20; } diff --git a/lib/src/common/pdu_queue.cc b/lib/src/common/pdu_queue.cc index 9b5e83c7b..4a45f0721 100644 --- a/lib/src/common/pdu_queue.cc +++ b/lib/src/common/pdu_queue.cc @@ -48,7 +48,7 @@ uint8_t* pdu_queue::request(uint32_t len) fprintf(stderr, "Error request buffer of invalid size %d. Max bytes %d\n", len, MAX_PDU_LEN); return NULL; } - pdu_t *pdu = pool.allocate(); + pdu_t *pdu = pool.allocate("pdu_queue::request"); if (!pdu) { if (log_h) { log_h->error("Not enough buffers for MAC PDU\n"); @@ -96,11 +96,6 @@ bool pdu_queue::process_pdus() if (callback) { callback->process_pdu(pdu->ptr, pdu->len, pdu->channel, pdu->tstamp); } - if (pdu->channel == DCH) { - if (!pool.deallocate(pdu)) { - log_h->warning("Error deallocating from buffer pool in process_pdus(): buffer not created in this pool.\n"); - } - } cnt++; have_data = true; } diff --git a/srsenb/src/mac/ue.cc b/srsenb/src/mac/ue.cc index 975d6e9b1..0ddd5afea 100644 --- a/srsenb/src/mac/ue.cc +++ b/srsenb/src/mac/ue.cc @@ -152,6 +152,8 @@ void ue::process_pdu(uint8_t* pdu, uint32_t nof_bytes, srslte::pdu_queue::channe pcap->write_ul_crnti(pdu, nof_bytes, rnti, true, last_tti); } + pdus.deallocate(pdu); + uint32_t lcid_most_data = 0; int most_data = -99; diff --git a/srsue/src/mac/demux.cc b/srsue/src/mac/demux.cc index 640b78bd5..dd481c76c 100644 --- a/srsue/src/mac/demux.cc +++ b/srsue/src/mac/demux.cc @@ -148,6 +148,8 @@ void demux::process_pdu(uint8_t *mac_pdu, uint32_t nof_bytes, srslte::pdu_queue: process_sch_pdu(&mac_msg); //srslte_vec_fprint_byte(stdout, mac_pdu, nof_bytes); + + pdus.deallocate(mac_pdu); break; case srslte::pdu_queue::BCH: rlc->write_pdu_bcch_dlsch(mac_pdu, nof_bytes);