<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-remsim/+/16595">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bankd: Introduce SIGMAPADD to tell worker about new mapping<br><br>So far the wokrer used to sleep 10s and only check in those intervals<br>if [finally] a mapping had arrived.  Using SIGMAPADD, we can<br>directly break the worker out of its select() call and hence make<br>it pick up a new mapping instantaneously.<br><br>This also makes RemsimBankd_Tests.TC_removeMapping_connected() pass<br><br>Change-Id: If0130ab4b49ffcae6ab7a8b9926a6d9477eb3981<br>---<br>M src/bankd/bankd_main.c<br>1 file changed, 15 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/bankd/bankd_main.c b/src/bankd/bankd_main.c</span><br><span>index 29a13ed..af25ded 100644</span><br><span>--- a/src/bankd/bankd_main.c</span><br><span>+++ b/src/bankd/bankd_main.c</span><br><span>@@ -53,9 +53,11 @@</span><br><span> </span><br><span> /* signal indicates to worker thread that its map has been deleted */</span><br><span> #define SIGMAPDEL    SIGRTMIN+1</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIGMAPADD   SIGRTMIN+2</span><br><span> </span><br><span> static void handle_sig_usr1(int sig);</span><br><span> static void handle_sig_mapdel(int sig);</span><br><span style="color: hsl(120, 100%, 40%);">+static void handle_sig_mapadd(int sig);</span><br><span> </span><br><span> __thread void *talloc_asn1_ctx;</span><br><span> struct bankd *g_bankd;</span><br><span>@@ -203,8 +205,10 @@</span><br><span>                  if (!map) {</span><br><span>                          LOGPFSML(srvc->fi, LOGL_ERROR, "could not create slotmap\n");</span><br><span>                           resp = rspro_gen_CreateMappingRes(ResultCode_illegalSlotId);</span><br><span style="color: hsl(0, 100%, 40%);">-                    } else</span><br><span style="color: hsl(120, 100%, 40%);">+                        } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              send_signal_to_worker(NULL, &cs, SIGMAPADD);</span><br><span>                             resp = rspro_gen_CreateMappingRes(ResultCode_ok);</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span>            }</span><br><span> send_resp:</span><br><span>              server_conn_send_rspro(srvc, resp);</span><br><span>@@ -359,6 +363,7 @@</span><br><span> </span><br><span>        g_bankd->main = pthread_self();</span><br><span>   signal(SIGMAPDEL, handle_sig_mapdel);</span><br><span style="color: hsl(120, 100%, 40%);">+ signal(SIGMAPADD, handle_sig_mapadd);</span><br><span>        signal(SIGUSR1, handle_sig_usr1);</span><br><span> </span><br><span>        /* Np lock or mutex required for the pcsc_slot_names list, as this is only</span><br><span>@@ -448,6 +453,13 @@</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* signal handler for receiving SIGMAPADD from main thread */</span><br><span style="color: hsl(120, 100%, 40%);">+static void handle_sig_mapadd(int sig)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  LOGW(g_worker, "SIGMAPADD received\n");</span><br><span style="color: hsl(120, 100%, 40%);">+     /* do nothing */</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void handle_sig_usr1(int sig)</span><br><span> {</span><br><span>   OSMO_ASSERT(sig == SIGUSR1);</span><br><span>@@ -769,6 +781,8 @@</span><br><span>   if (rc == -1 && errno == EINTR) {</span><br><span>            if (worker->state == BW_ST_CONN_CLIENT_UNMAPPED)</span><br><span>                  return -23;</span><br><span style="color: hsl(120, 100%, 40%);">+           else</span><br><span style="color: hsl(120, 100%, 40%);">+                  worker_try_slotmap(worker);</span><br><span>          goto restart_wait;</span><br><span>   } else if (rc < 0)</span><br><span>                return rc;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-remsim/+/16595">change 16595</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-remsim/+/16595"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-remsim </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: If0130ab4b49ffcae6ab7a8b9926a6d9477eb3981 </div>
<div style="display:none"> Gerrit-Change-Number: 16595 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>