diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2019-07-22 18:10:52 +0200 |
---|---|---|
committer | pespin <pespin@sysmocom.de> | 2019-07-23 09:06:01 +0000 |
commit | 720b912ba9c8e51a40451e9cc44b3cc0bac698c2 (patch) | |
tree | a74e170f2862f33096b1587db2dbee91a7227d72 /Transceiver52M | |
parent | c3325b9aeb446f2cc888523d8c9f5f4ff3a39242 (diff) |
Transceiver: Clean up code passing parameters to threads
TransceiverChannel naming was misleading there. It's simply a data type
used to pass 2 parameters through the void* of the thread entry
function, so let's clearly specify is a storage for thread params.
Furthermore, we don't need a full C++ class for that, let's simply use a
struct.
Change-Id: I6e3898a8a66520cc5b2a7df9b9ae01b0b272387f
Diffstat (limited to 'Transceiver52M')
-rw-r--r-- | Transceiver52M/Transceiver.cpp | 42 | ||||
-rw-r--r-- | Transceiver52M/Transceiver.h | 40 |
2 files changed, 37 insertions, 45 deletions
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp index a47f7db..b12a498 100644 --- a/Transceiver52M/Transceiver.cpp +++ b/Transceiver52M/Transceiver.cpp @@ -240,10 +240,12 @@ bool Transceiver::init(FillerType filler, size_t rtsc, unsigned rach_delay, /* Start control threads */ for (size_t i = 0; i < mChans; i++) { - TransceiverChannel *chan = new TransceiverChannel(this, i); + TrxChanThParams *params = (TrxChanThParams *)malloc(sizeof(struct TrxChanThParams)); + params->trx = this; + params->num = i; mControlServiceLoopThreads[i] = new Thread(stackSize); mControlServiceLoopThreads[i]->start((void * (*)(void*)) - ControlServiceLoopAdapter, (void*) chan); + ControlServiceLoopAdapter, (void*) params); if (i && filler == FILLER_DUMMY) filler = FILLER_ZERO; @@ -292,15 +294,19 @@ bool Transceiver::start() /* Launch uplink and downlink burst processing threads */ for (size_t i = 0; i < mChans; i++) { - TransceiverChannel *chan = new TransceiverChannel(this, i); + TrxChanThParams *params = (TrxChanThParams *)malloc(sizeof(struct TrxChanThParams)); + params->trx = this; + params->num = i; mRxServiceLoopThreads[i] = new Thread(stackSize); mRxServiceLoopThreads[i]->start((void * (*)(void*)) - RxUpperLoopAdapter, (void*) chan); + RxUpperLoopAdapter, (void*) params); - chan = new TransceiverChannel(this, i); + params = (TrxChanThParams *)malloc(sizeof(struct TrxChanThParams)); + params->trx = this; + params->num = i; mTxPriorityQueueServiceLoopThreads[i] = new Thread(stackSize); mTxPriorityQueueServiceLoopThreads[i]->start((void * (*)(void*)) - TxUpperLoopAdapter, (void*) chan); + TxUpperLoopAdapter, (void*) params); } mForceClockInterface = true; @@ -1108,13 +1114,13 @@ void Transceiver::writeClockInterface() } -void *RxUpperLoopAdapter(TransceiverChannel *chan) +void *RxUpperLoopAdapter(TrxChanThParams *params) { char thread_name[16]; - Transceiver *trx = chan->trx; - size_t num = chan->num; + Transceiver *trx = params->trx; + size_t num = params->num; - delete chan; + free(params); snprintf(thread_name, 16, "RxUpper%zu", num); set_selfthread_name(thread_name); @@ -1154,13 +1160,13 @@ void *TxLowerLoopAdapter(Transceiver *transceiver) return NULL; } -void *ControlServiceLoopAdapter(TransceiverChannel *chan) +void *ControlServiceLoopAdapter(TrxChanThParams *params) { char thread_name[16]; - Transceiver *trx = chan->trx; - size_t num = chan->num; + Transceiver *trx = params->trx; + size_t num = params->num; - delete chan; + free(params); snprintf(thread_name, 16, "CtrlService%zu", num); set_selfthread_name(thread_name); @@ -1172,13 +1178,13 @@ void *ControlServiceLoopAdapter(TransceiverChannel *chan) return NULL; } -void *TxUpperLoopAdapter(TransceiverChannel *chan) +void *TxUpperLoopAdapter(TrxChanThParams *params) { char thread_name[16]; - Transceiver *trx = chan->trx; - size_t num = chan->num; + Transceiver *trx = params->trx; + size_t num = params->num; - delete chan; + free(params); snprintf(thread_name, 16, "TxUpper%zu", num); set_selfthread_name(thread_name); diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h index 8da52d1..18dc5f2 100644 --- a/Transceiver52M/Transceiver.h +++ b/Transceiver52M/Transceiver.h @@ -39,19 +39,9 @@ extern "C" { class Transceiver; /** Channel descriptor for transceiver object and channel number pair */ -struct TransceiverChannel { - TransceiverChannel(Transceiver *trx, int num) - { - this->trx = trx; - this->num = num; - } - - ~TransceiverChannel() - { - } - - Transceiver *trx; - size_t num; +struct TrxChanThParams { + Transceiver *trx; + size_t num; }; /** Internal transceiver state variables */ @@ -248,15 +238,11 @@ protected: */ bool driveTxPriorityQueue(size_t chan); - friend void *RxUpperLoopAdapter(TransceiverChannel *); - - friend void *TxUpperLoopAdapter(TransceiverChannel *); - - friend void *RxLowerLoopAdapter(Transceiver *); - - friend void *TxLowerLoopAdapter(Transceiver *); - - friend void *ControlServiceLoopAdapter(TransceiverChannel *); + friend void *RxUpperLoopAdapter(TrxChanThParams *params); + friend void *TxUpperLoopAdapter(TrxChanThParams *params); + friend void *RxLowerLoopAdapter(Transceiver *transceiver); + friend void *TxLowerLoopAdapter(Transceiver *transceiver); + friend void *ControlServiceLoopAdapter(TrxChanThParams *params); void reset(); @@ -267,14 +253,14 @@ protected: void logRxBurst(size_t chan, const struct trx_ul_burst_ind *bi); }; -void *RxUpperLoopAdapter(TransceiverChannel *); +void *RxUpperLoopAdapter(TrxChanThParams *params); /** Main drive threads */ -void *RxLowerLoopAdapter(Transceiver *); -void *TxLowerLoopAdapter(Transceiver *); +void *RxLowerLoopAdapter(Transceiver *transceiver); +void *TxLowerLoopAdapter(Transceiver *transceiver); /** control message handler thread loop */ -void *ControlServiceLoopAdapter(TransceiverChannel *); +void *ControlServiceLoopAdapter(TrxChanThParams *params); /** transmit queueing thread loop */ -void *TxUpperLoopAdapter(TransceiverChannel *); +void *TxUpperLoopAdapter(TrxChanThParams *params); |