<p>pespin <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-trx/+/14898">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, but someone else must approve
  fixeria: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Transceiver: Clean up code passing parameters to threads<br><br>TransceiverChannel naming was misleading there. It's simply a data type<br>used to pass 2 parameters through the void* of the thread entry<br>function, so let's clearly specify is a storage for thread params.<br>Furthermore, we don't need a full C++ class for that, let's simply use a<br>struct.<br><br>Change-Id: I6e3898a8a66520cc5b2a7df9b9ae01b0b272387f<br>---<br>M Transceiver52M/Transceiver.cpp<br>M Transceiver52M/Transceiver.h<br>2 files changed, 37 insertions(+), 45 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp</span><br><span>index a47f7db..b12a498 100644</span><br><span>--- a/Transceiver52M/Transceiver.cpp</span><br><span>+++ b/Transceiver52M/Transceiver.cpp</span><br><span>@@ -240,10 +240,12 @@</span><br><span> </span><br><span>   /* Start control threads */</span><br><span>   for (size_t i = 0; i < mChans; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-    TransceiverChannel *chan = new TransceiverChannel(this, i);</span><br><span style="color: hsl(120, 100%, 40%);">+    TrxChanThParams *params = (TrxChanThParams *)malloc(sizeof(struct TrxChanThParams));</span><br><span style="color: hsl(120, 100%, 40%);">+    params->trx = this;</span><br><span style="color: hsl(120, 100%, 40%);">+    params->num = i;</span><br><span>     mControlServiceLoopThreads[i] = new Thread(stackSize);</span><br><span>     mControlServiceLoopThreads[i]->start((void * (*)(void*))</span><br><span style="color: hsl(0, 100%, 40%);">-                                 ControlServiceLoopAdapter, (void*) chan);</span><br><span style="color: hsl(120, 100%, 40%);">+                                 ControlServiceLoopAdapter, (void*) params);</span><br><span> </span><br><span>     if (i && filler == FILLER_DUMMY)</span><br><span>       filler = FILLER_ZERO;</span><br><span>@@ -292,15 +294,19 @@</span><br><span> </span><br><span>   /* Launch uplink and downlink burst processing threads */</span><br><span>   for (size_t i = 0; i < mChans; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-    TransceiverChannel *chan = new TransceiverChannel(this, i);</span><br><span style="color: hsl(120, 100%, 40%);">+    TrxChanThParams *params = (TrxChanThParams *)malloc(sizeof(struct TrxChanThParams));</span><br><span style="color: hsl(120, 100%, 40%);">+    params->trx = this;</span><br><span style="color: hsl(120, 100%, 40%);">+    params->num = i;</span><br><span>     mRxServiceLoopThreads[i] = new Thread(stackSize);</span><br><span>     mRxServiceLoopThreads[i]->start((void * (*)(void*))</span><br><span style="color: hsl(0, 100%, 40%);">-                            RxUpperLoopAdapter, (void*) chan);</span><br><span style="color: hsl(120, 100%, 40%);">+                            RxUpperLoopAdapter, (void*) params);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    chan = new TransceiverChannel(this, i);</span><br><span style="color: hsl(120, 100%, 40%);">+    params = (TrxChanThParams *)malloc(sizeof(struct TrxChanThParams));</span><br><span style="color: hsl(120, 100%, 40%);">+    params->trx = this;</span><br><span style="color: hsl(120, 100%, 40%);">+    params->num = i;</span><br><span>     mTxPriorityQueueServiceLoopThreads[i] = new Thread(stackSize);</span><br><span>     mTxPriorityQueueServiceLoopThreads[i]->start((void * (*)(void*))</span><br><span style="color: hsl(0, 100%, 40%);">-                            TxUpperLoopAdapter, (void*) chan);</span><br><span style="color: hsl(120, 100%, 40%);">+                            TxUpperLoopAdapter, (void*) params);</span><br><span>   }</span><br><span> </span><br><span>   mForceClockInterface = true;</span><br><span>@@ -1108,13 +1114,13 @@</span><br><span> </span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void *RxUpperLoopAdapter(TransceiverChannel *chan)</span><br><span style="color: hsl(120, 100%, 40%);">+void *RxUpperLoopAdapter(TrxChanThParams *params)</span><br><span> {</span><br><span>   char thread_name[16];</span><br><span style="color: hsl(0, 100%, 40%);">-  Transceiver *trx = chan->trx;</span><br><span style="color: hsl(0, 100%, 40%);">-  size_t num = chan->num;</span><br><span style="color: hsl(120, 100%, 40%);">+  Transceiver *trx = params->trx;</span><br><span style="color: hsl(120, 100%, 40%);">+  size_t num = params->num;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  delete chan;</span><br><span style="color: hsl(120, 100%, 40%);">+  free(params);</span><br><span> </span><br><span>   snprintf(thread_name, 16, "RxUpper%zu", num);</span><br><span>   set_selfthread_name(thread_name);</span><br><span>@@ -1154,13 +1160,13 @@</span><br><span>   return NULL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void *ControlServiceLoopAdapter(TransceiverChannel *chan)</span><br><span style="color: hsl(120, 100%, 40%);">+void *ControlServiceLoopAdapter(TrxChanThParams *params)</span><br><span> {</span><br><span>   char thread_name[16];</span><br><span style="color: hsl(0, 100%, 40%);">-  Transceiver *trx = chan->trx;</span><br><span style="color: hsl(0, 100%, 40%);">-  size_t num = chan->num;</span><br><span style="color: hsl(120, 100%, 40%);">+  Transceiver *trx = params->trx;</span><br><span style="color: hsl(120, 100%, 40%);">+  size_t num = params->num;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  delete chan;</span><br><span style="color: hsl(120, 100%, 40%);">+  free(params);</span><br><span> </span><br><span>   snprintf(thread_name, 16, "CtrlService%zu", num);</span><br><span>   set_selfthread_name(thread_name);</span><br><span>@@ -1172,13 +1178,13 @@</span><br><span>   return NULL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void *TxUpperLoopAdapter(TransceiverChannel *chan)</span><br><span style="color: hsl(120, 100%, 40%);">+void *TxUpperLoopAdapter(TrxChanThParams *params)</span><br><span> {</span><br><span>   char thread_name[16];</span><br><span style="color: hsl(0, 100%, 40%);">-  Transceiver *trx = chan->trx;</span><br><span style="color: hsl(0, 100%, 40%);">-  size_t num = chan->num;</span><br><span style="color: hsl(120, 100%, 40%);">+  Transceiver *trx = params->trx;</span><br><span style="color: hsl(120, 100%, 40%);">+  size_t num = params->num;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  delete chan;</span><br><span style="color: hsl(120, 100%, 40%);">+  free(params);</span><br><span> </span><br><span>   snprintf(thread_name, 16, "TxUpper%zu", num);</span><br><span>   set_selfthread_name(thread_name);</span><br><span>diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h</span><br><span>index 8da52d1..18dc5f2 100644</span><br><span>--- a/Transceiver52M/Transceiver.h</span><br><span>+++ b/Transceiver52M/Transceiver.h</span><br><span>@@ -39,19 +39,9 @@</span><br><span> class Transceiver;</span><br><span> </span><br><span> /** Channel descriptor for transceiver object and channel number pair */</span><br><span style="color: hsl(0, 100%, 40%);">-struct TransceiverChannel {</span><br><span style="color: hsl(0, 100%, 40%);">-  TransceiverChannel(Transceiver *trx, int num)</span><br><span style="color: hsl(0, 100%, 40%);">-  {</span><br><span style="color: hsl(0, 100%, 40%);">-    this->trx = trx;</span><br><span style="color: hsl(0, 100%, 40%);">-    this->num = num;</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  ~TransceiverChannel()</span><br><span style="color: hsl(0, 100%, 40%);">-  {</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  Transceiver *trx;</span><br><span style="color: hsl(0, 100%, 40%);">-  size_t num;</span><br><span style="color: hsl(120, 100%, 40%);">+struct TrxChanThParams {</span><br><span style="color: hsl(120, 100%, 40%);">+        Transceiver *trx;</span><br><span style="color: hsl(120, 100%, 40%);">+     size_t num;</span><br><span> };</span><br><span> </span><br><span> /** Internal transceiver state variables */</span><br><span>@@ -248,15 +238,11 @@</span><br><span>   */</span><br><span>   bool driveTxPriorityQueue(size_t chan);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  friend void *RxUpperLoopAdapter(TransceiverChannel *);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  friend void *TxUpperLoopAdapter(TransceiverChannel *);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  friend void *RxLowerLoopAdapter(Transceiver *);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  friend void *TxLowerLoopAdapter(Transceiver *);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  friend void *ControlServiceLoopAdapter(TransceiverChannel *);</span><br><span style="color: hsl(120, 100%, 40%);">+  friend void *RxUpperLoopAdapter(TrxChanThParams *params);</span><br><span style="color: hsl(120, 100%, 40%);">+  friend void *TxUpperLoopAdapter(TrxChanThParams *params);</span><br><span style="color: hsl(120, 100%, 40%);">+  friend void *RxLowerLoopAdapter(Transceiver *transceiver);</span><br><span style="color: hsl(120, 100%, 40%);">+  friend void *TxLowerLoopAdapter(Transceiver *transceiver);</span><br><span style="color: hsl(120, 100%, 40%);">+  friend void *ControlServiceLoopAdapter(TrxChanThParams *params);</span><br><span> </span><br><span> </span><br><span>   void reset();</span><br><span>@@ -267,14 +253,14 @@</span><br><span>   void logRxBurst(size_t chan, const struct trx_ul_burst_ind *bi);</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void *RxUpperLoopAdapter(TransceiverChannel *);</span><br><span style="color: hsl(120, 100%, 40%);">+void *RxUpperLoopAdapter(TrxChanThParams *params);</span><br><span> </span><br><span> /** Main drive threads */</span><br><span style="color: hsl(0, 100%, 40%);">-void *RxLowerLoopAdapter(Transceiver *);</span><br><span style="color: hsl(0, 100%, 40%);">-void *TxLowerLoopAdapter(Transceiver *);</span><br><span style="color: hsl(120, 100%, 40%);">+void *RxLowerLoopAdapter(Transceiver *transceiver);</span><br><span style="color: hsl(120, 100%, 40%);">+void *TxLowerLoopAdapter(Transceiver *transceiver);</span><br><span> </span><br><span> /** control message handler thread loop */</span><br><span style="color: hsl(0, 100%, 40%);">-void *ControlServiceLoopAdapter(TransceiverChannel *);</span><br><span style="color: hsl(120, 100%, 40%);">+void *ControlServiceLoopAdapter(TrxChanThParams *params);</span><br><span> </span><br><span> /** transmit queueing thread loop */</span><br><span style="color: hsl(0, 100%, 40%);">-void *TxUpperLoopAdapter(TransceiverChannel *);</span><br><span style="color: hsl(120, 100%, 40%);">+void *TxUpperLoopAdapter(TrxChanThParams *params);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-trx/+/14898">change 14898</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-trx/+/14898"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-trx </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I6e3898a8a66520cc5b2a7df9b9ae01b0b272387f </div>
<div style="display:none"> Gerrit-Change-Number: 14898 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>