<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-remsim/+/16492">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bankd: Implement new ResetStateReq<br><br>Change-Id: Ib794e605162903a2b2c4f4516887ec91fc8d139a<br>---<br>M src/bankd/bankd_main.c<br>M src/slotmap.c<br>M src/slotmap.h<br>3 files changed, 30 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-remsim refs/changes/92/16492/1</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 09a9e1d..5137635 100644</span><br><span>--- a/src/bankd/bankd_main.c</span><br><span>+++ b/src/bankd/bankd_main.c</span><br><span>@@ -150,6 +150,7 @@</span><br><span> {</span><br><span>      const CreateMappingReq_t *creq = NULL;</span><br><span>       const RemoveMappingReq_t *rreq = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct bankd_worker *worker;</span><br><span>         struct slot_mapping *map;</span><br><span>    struct bank_slot bs;</span><br><span>         struct client_slot cs;</span><br><span>@@ -230,6 +231,19 @@</span><br><span>                }</span><br><span>            server_conn_send_rspro(srvc, resp);</span><br><span>          break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case RsproPDUchoice_PR_resetStateReq:</span><br><span style="color: hsl(120, 100%, 40%);">+         /* delete all slotmaps */</span><br><span style="color: hsl(120, 100%, 40%);">+             slotmap_del_all(g_bankd->slotmaps);</span><br><span style="color: hsl(120, 100%, 40%);">+                /* notify all workers about maps having disappeared */</span><br><span style="color: hsl(120, 100%, 40%);">+                pthread_mutex_lock(&g_bankd->workers_mutex);</span><br><span style="color: hsl(120, 100%, 40%);">+           llist_for_each_entry(worker, &g_bankd->workers, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        pthread_kill(worker->thread, SIGMAPDEL);</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span style="color: hsl(120, 100%, 40%);">+             pthread_mutex_unlock(&g_bankd->workers_mutex);</span><br><span style="color: hsl(120, 100%, 40%);">+         /* send response to server */</span><br><span style="color: hsl(120, 100%, 40%);">+         resp = rspro_gen_ResetStateRes(ResultCode_ok);</span><br><span style="color: hsl(120, 100%, 40%);">+                server_conn_send_rspro(srvc, resp);</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span>       default:</span><br><span>             LOGPFSML(srvc->fi, LOGL_ERROR, "Unknown/Unsupported RSPRO PDU type: %u\n",</span><br><span>                       pdu->msg.present);</span><br><span>diff --git a/src/slotmap.c b/src/slotmap.c</span><br><span>index b4a8e6f..b837f01 100644</span><br><span>--- a/src/slotmap.c</span><br><span>+++ b/src/slotmap.c</span><br><span>@@ -159,6 +159,19 @@</span><br><span>       slotmaps_unlock(maps);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* thread-safe removal of all bank<->client maps */</span><br><span style="color: hsl(120, 100%, 40%);">+void slotmap_del_all(struct slotmaps *maps)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  struct slot_mapping *map, *map2;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    slotmaps_wrlock(maps);</span><br><span style="color: hsl(120, 100%, 40%);">+        llist_for_each_entry_safe(map, map2, &maps->mappings, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+          _slotmap_del(maps, map);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     slotmaps_unlock(maps);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct slotmaps *slotmap_init(void *ctx)</span><br><span> {</span><br><span>         struct slotmaps *sm = talloc_zero(ctx, struct slotmaps);</span><br><span>diff --git a/src/slotmap.h b/src/slotmap.h</span><br><span>index bf18e04..3d07c8d 100644</span><br><span>--- a/src/slotmap.h</span><br><span>+++ b/src/slotmap.h</span><br><span>@@ -83,6 +83,9 @@</span><br><span> void slotmap_del(struct slotmaps *maps, struct slot_mapping *map);</span><br><span> void _slotmap_del(struct slotmaps *maps, struct slot_mapping *map);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* thread-safe removal of all bank<->client maps */</span><br><span style="color: hsl(120, 100%, 40%);">+void slotmap_del_all(struct slotmaps *maps);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* initialize the entire map collection */</span><br><span> struct slotmaps *slotmap_init(void *ctx);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-remsim/+/16492">change 16492</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/+/16492"/><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: Ib794e605162903a2b2c4f4516887ec91fc8d139a </div>
<div style="display:none"> Gerrit-Change-Number: 16492 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>