Only ip6_init() calls nd6_init(), exactly once, just like it calls
frag6_init() which on the other hand does not have some fra6_init_done
to guard against itself.

Like all other domains, ip6_init() is called in domaininit(), early in
the kernel's main().

This variable was probably never useful and dates back to nd6.c r1.1:
    bring in KAME IPv6 code, dated 19991208.

Feedback? OK?

NB:  While here, nd6 and frag6 could statically initalise their lists
right away (they're both static/local to nd6.c and frag6.c anyway), but
that should probably be another diff, if at all, with more static added
to those files.

diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c
index 9fdaf8138d1..07ccf615746 100644
--- a/sys/netinet6/nd6.c
+++ b/sys/netinet6/nd6.c
@@ -104,21 +104,12 @@ struct task nd6_expire_task;
 void
 nd6_init(void)
 {
-       static int nd6_init_done = 0;
-
-       if (nd6_init_done) {
-               log(LOG_NOTICE, "%s called more than once\n", __func__);
-               return;
-       }
-
        TAILQ_INIT(&nd6_list);
        pool_init(&nd6_pool, sizeof(struct llinfo_nd6), 0,
            IPL_SOFTNET, 0, "nd6", NULL);
 
        task_set(&nd6_expire_task, nd6_expire, NULL);
 
-       nd6_init_done = 1;
-
        /* start timer */
        timeout_set_proc(&nd6_timer_to, nd6_timer, NULL);
        timeout_set_proc(&nd6_slowtimo_ch, nd6_slowtimo, NULL);

Reply via email to