]> git.decadent.org.uk Git - odhcp6c.git/blobdiff - src/odhcp6c.c
Ensure signal-safety of signal handlers
[odhcp6c.git] / src / odhcp6c.c
index 2357a9a9aa577b7b58819c599c341b4c85e9abc8..7cdf09e47c25b62f1125c5c81efc17e2b97c6847 100644 (file)
@@ -266,6 +266,7 @@ int main(_unused int argc, char* const argv[])
 
        while (!signal_term) { // Main logic
                odhcp6c_clear_state(STATE_SERVER_ID);
+               odhcp6c_clear_state(STATE_SERVER_ADDR);
                odhcp6c_clear_state(STATE_IA_NA);
                odhcp6c_clear_state(STATE_IA_PD);
                odhcp6c_clear_state(STATE_SNTP_IP);
@@ -365,6 +366,7 @@ int main(_unused int argc, char* const argv[])
                                }
 
                                odhcp6c_clear_state(STATE_SERVER_ID); // Remove binding
+                               odhcp6c_clear_state(STATE_SERVER_ADDR);
 
                                size_t ia_pd_len, ia_na_len;
                                odhcp6c_get_state(STATE_IA_PD, &ia_pd_len);
@@ -478,11 +480,8 @@ bool odhcp6c_signal_process(void)
                if (ra_link_up())
                        signal_usr2 = true;
 
-               if (ra_updated && (bound || allow_slaac_only == 0))
+               if (ra_updated && (bound || allow_slaac_only >= 0))
                        script_call("ra-updated"); // Immediate process urgent events
-               else if (ra_updated && !bound && allow_slaac_only > 0)
-                       script_delay_call("ra-updated", allow_slaac_only);
-
        }
 
        return signal_usr1 || signal_usr2 || signal_term;