]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Fix autotrust-5011 file used from libunbound (no probing by itself because
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 2 Oct 2009 08:08:44 +0000 (08:08 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 2 Oct 2009 08:08:44 +0000 (08:08 +0000)
it may not have the processor whenever it likes).

git-svn-id: file:///svn/unbound/trunk@1857 be551aaa-1e26-0410-a405-d3ace91eadb9

daemon/worker.c
daemon/worker.h
doc/Changelog
libunbound/libworker.c
util/module.h
validator/autotrust.c

index 97cf40d0a15fca84adb61d0140fe17d793372d2f..e8fe788ef9a36c746d94f54ab178cdd7f243b4d0 100644 (file)
@@ -951,7 +951,7 @@ void worker_probe_timer_cb(void* arg)
        tv.tv_usec = 0;
 #endif
        if(tv.tv_sec != 0)
-               comm_timer_set(worker->probe_timer, &tv);
+               comm_timer_set(worker->env.probe_timer, &tv);
 }
 
 struct worker* 
@@ -1068,23 +1068,6 @@ worker_init(struct worker* worker, struct config_file *cfg,
        if(!worker->stat_timer) {
                log_err("could not create statistics timer");
        }
-       /* one probe timer per process -- if we have 5011 anchors */
-       if(autr_get_num_anchors(worker->daemon->env->anchors) > 0
-#ifndef THREADS_DISABLED
-               && worker->thread_num == 0
-#endif
-               ) {
-               struct timeval tv;
-               tv.tv_sec = 0;
-               tv.tv_usec = 0;
-               worker->probe_timer = comm_timer_create(worker->base,
-                       worker_probe_timer_cb, worker);
-               if(!worker->probe_timer) {
-                       log_err("could not create 5011-probe timer");
-               }
-               /* let timer fire, then it can reset itself */
-               comm_timer_set(worker->probe_timer, &tv);
-       }
 
        /* we use the msg_buffer_size as a good estimate for what the 
         * user wants for memory usage sizes */
@@ -1122,6 +1105,23 @@ worker_init(struct worker* worker, struct config_file *cfg,
                worker_delete(worker);
                return 0;
        }
+       /* one probe timer per process -- if we have 5011 anchors */
+       if(autr_get_num_anchors(worker->env.anchors) > 0
+#ifndef THREADS_DISABLED
+               && worker->thread_num == 0
+#endif
+               ) {
+               struct timeval tv;
+               tv.tv_sec = 0;
+               tv.tv_usec = 0;
+               worker->env.probe_timer = comm_timer_create(worker->base,
+                       worker_probe_timer_cb, worker);
+               if(!worker->env.probe_timer) {
+                       log_err("could not create 5011-probe timer");
+               }
+               /* let timer fire, then it can reset itself */
+               comm_timer_set(worker->env.probe_timer, &tv);
+       }
        if(!worker->env.mesh || !worker->env.scratch_buffer) {
                worker_delete(worker);
                return 0;
@@ -1161,7 +1161,7 @@ worker_delete(struct worker* worker)
        comm_signal_delete(worker->comsig);
        tube_delete(worker->cmd);
        comm_timer_delete(worker->stat_timer);
-       comm_timer_delete(worker->probe_timer);
+       comm_timer_delete(worker->env.probe_timer);
        free(worker->ports);
        if(worker->thread_num == 0) {
                log_set_time(NULL);
index 993fa5e2bd92118abf58b0045c069afd31bd3d1d..2116d54d87e907d5bc1c88670845338f00b4bcca 100644 (file)
@@ -101,8 +101,6 @@ struct worker {
        struct comm_point* cmd_com;
        /** timer for statistics */
        struct comm_timer* stat_timer;
-       /** timer for autotrust probes */
-       struct comm_timer* probe_timer;
 
        /** number of requests that can be handled by this worker */
        size_t request_size;
index 108abdf5d51944d58a89efef3851214b52cc9467..dfa5e0fa85ed34dc1943f92134d2f51bf3951c22 100644 (file)
@@ -1,3 +1,7 @@
+2 October 2009: Wouter
+       - improve 5011 modularization.
+       - fix unbound-host so -d can be given before -C.
+
 28 September 2009: Wouter
        - autotrust-anchor-file can read multiline input and $ORIGIN.
        - prevent integer overflow in holddown calculation. review fixes.
index dcc09337100f16e8c45e13c4588d10d579a5cd6c..a35359c39e7b9ebbebe8fa9703b535bbdc9d06b8 100644 (file)
@@ -130,6 +130,7 @@ libworker_setup(struct ub_ctx* ctx, int is_bg)
                return NULL;
        }
        w->env->worker = (struct worker*)w;
+       w->env->probe_timer = NULL;
        seed = (unsigned int)time(NULL) ^ (unsigned int)getpid() ^
                (((unsigned int)w->thread_num)<<17);
        seed ^= (unsigned int)w->env->alloc->next_id;
index 8c430affa45081255761994f60a5d6d4ef492cae..3f228314d8832d76d663044676ccd3e8628d82c7 100644 (file)
@@ -212,6 +212,8 @@ struct module_env {
        /** negative cache, configured by the validator. if not NULL,
         * contains NSEC record lookup trees. */
        struct val_neg_cache* neg_cache;
+       /** the 5011-probe timer (if any) */
+       struct comm_timer* probe_timer;
        /** Mapping of forwarding zones to targets.
         * iterator forwarder information. per-thread, created by worker */
        struct iter_forwards* fwds;
index 7ac2c863537475df0f3bd81650c48bb6b1699c57..5568300f0114e4e5735746c593bb9cfb4c23b909 100644 (file)
@@ -57,7 +57,6 @@
 #include "services/mesh.h"
 #include "services/cache/rrset.h"
 #include "validator/val_kcache.h"
-#include "daemon/worker.h"
 
 /** number of times a key must be seen before it can become valid */
 #define MIN_PENDINGCOUNT 2
@@ -1625,19 +1624,18 @@ wait_probe_time(struct val_anchors* anchors)
 static void
 reset_worker_timer(struct module_env* env)
 {
-       struct worker* worker = env->worker;
        struct timeval tv;
 #ifndef S_SPLINT_S
        uint32_t next = (uint32_t)wait_probe_time(env->anchors);
        /* in case this is libunbound, no timer */
-       if(!worker || !worker->probe_timer)
+       if(!env->probe_timer)
                return;
        if(next > *env->now)
                tv.tv_sec = (time_t)(next - *env->now);
        else    tv.tv_sec = 0;
 #endif
        tv.tv_usec = 0;
-       comm_timer_set(worker->probe_timer, &tv);
+       comm_timer_set(env->probe_timer, &tv);
        verbose(VERB_ALGO, "scheduled next probe in %d sec", (int)tv.tv_sec);
 }