]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
unetmsg: clean up remote data when replacing the incoming connection
authorFelix Fietkau <nbd@nbd.name>
Mon, 12 May 2025 09:15:09 +0000 (11:15 +0200)
committerFelix Fietkau <nbd@nbd.name>
Mon, 12 May 2025 10:47:20 +0000 (12:47 +0200)
Ensure that pub/sub state is in sync

Signed-off-by: Felix Fietkau <nbd@nbd.name>
package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd-remote.uc

index d905dbd349b576c4dd794fa28ab3a93760d8c2b1..65cdfac04adc8f541a23a2b065b72f8f42b172d1 100644 (file)
@@ -46,6 +46,15 @@ function network_socket_close(data)
        data.socket.close();
 }
 
+function network_rx_cleanup_state(name)
+{
+       for (let name, sub in core.remote_subscribe)
+               delete sub[name];
+
+       for (let name, sub in core.remote_publish)
+               delete sub[name];
+}
+
 function network_rx_socket_close(data)
 {
        if (!data)
@@ -53,14 +62,10 @@ function network_rx_socket_close(data)
 
        core.dbg(`Incoming connection from ${data.name} closed\n`);
        let net = networks[data.network];
-       if (net && net.rx_channels[data.name] == data)
+       if (net && net.rx_channels[data.name] != data) {
                delete net.rx_channels[data.name];
-
-       for (let name, sub in core.remote_subscribe)
-               delete sub[data.name];
-
-       for (let name, sub in core.remote_publish)
-               delete sub[data.name];
+               network_rx_cleanup_state(data.name);
+       }
 
        network_socket_close(data);
 }
@@ -189,6 +194,7 @@ function network_check_auth(sock_data, info)
        if (sock_data.timer)
                sock_data.timer.cancel();
        sock_data.auth = true;
+       network_rx_cleanup_state(sock_data.name);
        net.rx_channels[sock_data.name] = sock_data;
        core.dbg(`Incoming connection from ${sock_data.name} established\n`);