]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
regional nicer, remove region-allocator.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 18 Oct 2007 20:31:43 +0000 (20:31 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 18 Oct 2007 20:31:43 +0000 (20:31 +0000)
git-svn-id: file:///svn/unbound/trunk@697 be551aaa-1e26-0410-a405-d3ace91eadb9

51 files changed:
checkconf/unbound-checkconf.c
daemon/worker.c
daemon/worker.h
doc/Changelog
iterator/iter_delegpt.c
iterator/iter_delegpt.h
iterator/iter_donotq.c
iterator/iter_donotq.h
iterator/iter_fwd.c
iterator/iter_fwd.h
iterator/iter_hints.c
iterator/iter_hints.h
iterator/iter_scrub.c
iterator/iter_scrub.h
iterator/iter_utils.c
iterator/iter_utils.h
iterator/iterator.c
services/cache/dns.c
services/cache/dns.h
services/cache/rrset.c
services/cache/rrset.h
services/mesh.c
testcode/unitmsgparse.c
testcode/unitverify.c
util/alloc.c
util/data/msgencode.c
util/data/msgencode.h
util/data/msgparse.c
util/data/msgparse.h
util/data/msgreply.c
util/data/msgreply.h
util/fptr_wlist.c
util/fptr_wlist.h
util/module.h
util/region-allocator.c [deleted file]
util/region-allocator.h [deleted file]
util/regional.c
util/regional.h
validator/val_anchor.c
validator/val_anchor.h
validator/val_kcache.c
validator/val_kcache.h
validator/val_kentry.c
validator/val_kentry.h
validator/val_nsec3.c
validator/val_nsec3.h
validator/val_sigcrypt.c
validator/val_sigcrypt.h
validator/val_utils.c
validator/val_utils.h
validator/validator.c

index ded21e4b08a00f66d125da344c2efb8ffe2e2d9c..9efedb5f5e024a1d739c50ce0145b76b2968f6c1 100644 (file)
@@ -47,7 +47,7 @@
 #include "util/config_file.h"
 #include "util/module.h"
 #include "util/net_help.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "iterator/iterator.h"
 #include "validator/validator.h"
 #include <pwd.h>
@@ -72,14 +72,16 @@ check_mod(struct config_file* cfg, struct module_func_block* fb)
        struct module_env env;
        memset(&env, 0, sizeof(env));
        env.cfg = cfg;
-       env.scratch = region_create(malloc, free);
+       env.scratch = regional_create();
        env.scratch_buffer = ldns_buffer_new(BUFSIZ);
+       if(!env.scratch || !env.scratch_buffer)
+               fatal_exit("out of memory");
        if(!(*fb->init)(&env, 0)) {
                fatal_exit("bad config for %s module", fb->name);
        }
        (*fb->deinit)(&env, 0);
        ldns_buffer_free(env.scratch_buffer);
-       region_destroy(env.scratch);
+       regional_destroy(env.scratch);
 }
 
 /** check configuration for errors */
index a8bf661d6b37f71daa563b3e754732572e18ba81..6754d9c819f0989371ff55863a5255f75eaa6bc2 100644 (file)
@@ -48,7 +48,7 @@
 #include "util/netevent.h"
 #include "util/config_file.h"
 #include "util/module.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/storage/slabhash.h"
 #include "services/listen_dnsport.h"
 #include "services/outside_network.h"
@@ -144,10 +144,11 @@ worker_mem_report(struct worker* ATTR_UNUSED(worker),
                                (&worker->env, i);
        }
        me = sizeof(*worker) + sizeof(*worker->base) + sizeof(*worker->comsig)
-               + comm_point_get_mem(worker->cmd_com) + 
-               sizeof(worker->rndstate) + region_get_mem(worker->scratchpad)+
-               sizeof(*worker->env.scratch_buffer) + 
-               ldns_buffer_capacity(worker->env.scratch_buffer);
+               + comm_point_get_mem(worker->cmd_com) 
+               + sizeof(worker->rndstate) 
+               + regional_get_mem(worker->scratchpad) 
+               + sizeof(*worker->env.scratch_buffer) 
+               + ldns_buffer_capacity(worker->env.scratch_buffer);
        if(cur_serv) {
                me += serviced_get_mem(cur_serv);
        }
@@ -390,7 +391,7 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
                qinfo->qname_len, qinfo->qtype, qinfo->qclass,
                worker->scratchpad, &msg, timenow);
        if(!dp) { /* no delegation, need to reprime */
-               region_free_all(worker->scratchpad);
+               regional_free_all(worker->scratchpad);
                return 0;
        }
        if(must_validate) {
@@ -398,7 +399,7 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
                case sec_status_unchecked:
                        /* some rrsets have not been verified yet, go and 
                         * let validator do that */
-                       region_free_all(worker->scratchpad);
+                       regional_free_all(worker->scratchpad);
                        return 0;
                case sec_status_bogus:
                        /* some rrsets are bogus, reply servfail */
@@ -408,7 +409,7 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
                        edns->bits &= EDNS_DO;
                        error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL, 
                                &msg->qinfo, id, flags, edns);
-                       region_free_all(worker->scratchpad);
+                       regional_free_all(worker->scratchpad);
                        return 1;
                case sec_status_secure:
                        /* all rrsets are secure */
@@ -437,7 +438,7 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
                error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL, 
                        &msg->qinfo, id, flags, edns);
        }
-       region_free_all(worker->scratchpad);
+       regional_free_all(worker->scratchpad);
        return 1;
 }
 
@@ -510,7 +511,7 @@ answer_from_cache(struct worker* worker, struct lruhash_entry* e, uint16_t id,
                bail_out:
                        rrset_array_unlock_touch(worker->env.rrset_cache, 
                                worker->scratchpad, rep->ref, rep->rrset_count);
-                       region_free_all(worker->scratchpad);
+                       regional_free_all(worker->scratchpad);
                        return 0;
                }
        }
@@ -525,7 +526,7 @@ answer_from_cache(struct worker* worker, struct lruhash_entry* e, uint16_t id,
                        &mrentry->key, id, flags, edns);
                rrset_array_unlock_touch(worker->env.rrset_cache, 
                        worker->scratchpad, rep->ref, rep->rrset_count);
-               region_free_all(worker->scratchpad);
+               regional_free_all(worker->scratchpad);
                return 1;
        } else if( rep->security == sec_status_unchecked && must_validate) {
                verbose(VERB_ALGO, "Cache reply: unchecked entry needs "
@@ -558,7 +559,7 @@ answer_from_cache(struct worker* worker, struct lruhash_entry* e, uint16_t id,
         * is bad while holding locks. */
        rrset_array_unlock_touch(worker->env.rrset_cache, worker->scratchpad,
                rep->ref, rep->rrset_count);
-       region_free_all(worker->scratchpad);
+       regional_free_all(worker->scratchpad);
        /* go and return this buffer to the client */
        return 1;
 }
@@ -940,8 +941,7 @@ worker_init(struct worker* worker, struct config_file *cfg,
        }
        /* we use the msg_buffer_size as a good estimate for what the 
         * user wants for memory usage sizes */
-       worker->scratchpad = region_create_custom(malloc, free, 
-               cfg->msg_buffer_size, cfg->msg_buffer_size/4, 32, 1);
+       worker->scratchpad = regional_create_custom(cfg->msg_buffer_size);
        if(!worker->scratchpad) {
                log_err("malloc failure");
                worker_delete(worker);
@@ -1006,7 +1006,7 @@ worker_delete(struct worker* worker)
                close(worker->cmd_recv_fd);
        worker->cmd_recv_fd = -1;
        alloc_clear(&worker->alloc);
-       region_destroy(worker->scratchpad);
+       regional_destroy(worker->scratchpad);
        free(worker);
 }
 
@@ -1043,7 +1043,7 @@ worker_send_query(uint8_t* qname, size_t qnamelen, uint16_t qtype,
        struct module_qstate* q)
 {
        struct worker* worker = q->env->worker;
-       struct outbound_entry* e = (struct outbound_entry*)region_alloc(
+       struct outbound_entry* e = (struct outbound_entry*)regional_alloc(
                q->region, sizeof(*e));
        if(!e) 
                return NULL;
index de30e935cf507874e7f12d99c2166c010b980f51..abf0b58fe7a4ca211060c1af349cabcf0fb7378f 100644 (file)
@@ -57,7 +57,7 @@ struct config_file;
 struct daemon;
 struct listen_port;
 struct ub_randstate;
-struct region;
+struct regional;
 
 /** size of table used for random numbers. large to be more secure. */
 #define RND_STATE_SIZE 256
@@ -105,8 +105,8 @@ struct worker {
        struct alloc_cache alloc;
        /** per thread statistics */
        struct server_stats stats;
-       /** thread scratch region */
-       struct region* scratchpad;
+       /** thread scratch regional */
+       struct regional* scratchpad;
 
        /** module environment passed to modules, changed for this thread */
        struct module_env env;
index c13265b74cb849dc57bff9b7513a03c4e4f3ed88..d474f146b4a8a0c3c65ff16e6cb3a3ecc5449740 100644 (file)
@@ -11,6 +11,8 @@
        - ldns-src.tar.gz is used if no ldns is found on the system, and
          statically linked into unbound.
        - start of regional allocator code.
+       - regional uses less memory and variables, simplified code.
+       - remove of region-allocator.
 
 17 October 2007: Wouter
        - fixup another cycle detect and ns-addr timeout resolution bug.
index 8272f4dce8057240c31940ea5ccdf33d8de6b7bf..4c17fc8968cd1eeec94e6fa673cf898843576b38 100644 (file)
 #include "config.h"
 #include "iterator/iter_delegpt.h"
 #include "services/cache/dns.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/data/dname.h"
 #include "util/data/packed_rrset.h"
 #include "util/data/msgreply.h"
 #include "util/net_help.h"
 
 struct delegpt* 
-delegpt_create(struct region* region)
+delegpt_create(struct regional* region)
 {
-       struct delegpt* dp=(struct delegpt*)region_alloc(region, sizeof(*dp));
+       struct delegpt* dp=(struct delegpt*)regional_alloc(
+               region, sizeof(*dp));
        if(!dp)
                return NULL;
        memset(dp, 0, sizeof(*dp));
        return dp;
 }
 
-struct delegpt* delegpt_copy(struct delegpt* dp, struct region* region)
+struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* region)
 {
        struct delegpt* copy = delegpt_create(region);
        struct delegpt_ns* ns;
@@ -80,15 +81,15 @@ struct delegpt* delegpt_copy(struct delegpt* dp, struct region* region)
 }
 
 int 
-delegpt_set_name(struct delegpt* dp, struct region* region, uint8_t* name)
+delegpt_set_name(struct delegpt* dp, struct regional* region, uint8_t* name)
 {
        dp->namelabs = dname_count_size_labels(name, &dp->namelen);
-       dp->name = region_alloc_init(region, name, dp->namelen);
+       dp->name = regional_alloc_init(region, name, dp->namelen);
        return dp->name != 0;
 }
 
 int 
-delegpt_add_ns(struct delegpt* dp, struct region* region, uint8_t* name)
+delegpt_add_ns(struct delegpt* dp, struct regional* region, uint8_t* name)
 {
        struct delegpt_ns* ns;
        size_t len;
@@ -97,14 +98,14 @@ delegpt_add_ns(struct delegpt* dp, struct region* region, uint8_t* name)
         * adding the same server as a dependency twice */
        if(delegpt_find_ns(dp, name, len))
                return 1;
-       ns = (struct delegpt_ns*)region_alloc(region,
+       ns = (struct delegpt_ns*)regional_alloc(region,
                sizeof(struct delegpt_ns));
        if(!ns)
                return 0;
        ns->next = dp->nslist;
        ns->namelen = len;
        dp->nslist = ns;
-       ns->name = region_alloc_init(region, name, ns->namelen);
+       ns->name = regional_alloc_init(region, name, ns->namelen);
        ns->resolved = 0;
        return 1;
 }
@@ -124,7 +125,7 @@ delegpt_find_ns(struct delegpt* dp, uint8_t* name, size_t namelen)
 }
 
 int 
-delegpt_add_target(struct delegpt* dp, struct region* region, 
+delegpt_add_target(struct delegpt* dp, struct regional* region, 
        uint8_t* name, size_t namelen, struct sockaddr_storage* addr, 
        socklen_t addrlen)
 {
@@ -138,10 +139,10 @@ delegpt_add_target(struct delegpt* dp, struct region* region,
 }
 
 int 
-delegpt_add_addr(struct delegpt* dp, struct region* region, 
+delegpt_add_addr(struct delegpt* dp, struct regional* region, 
        struct sockaddr_storage* addr, socklen_t addrlen)
 {
-       struct delegpt_addr* a = (struct delegpt_addr*)region_alloc(region,
+       struct delegpt_addr* a = (struct delegpt_addr*)regional_alloc(region,
                sizeof(struct delegpt_addr));
        if(!a)
                return 0;
@@ -256,7 +257,7 @@ find_NS(struct reply_info* rep, size_t from, size_t to)
 }
 
 struct delegpt* 
-delegpt_from_message(struct dns_msg* msg, struct region* region)
+delegpt_from_message(struct dns_msg* msg, struct regional* region)
 {
        struct ub_packed_rrset_key* ns_rrset = NULL;
        struct delegpt* dp;
@@ -305,7 +306,7 @@ delegpt_from_message(struct dns_msg* msg, struct region* region)
 }
 
 int 
-delegpt_rrset_add_ns(struct delegpt* dp, struct region* region,
+delegpt_rrset_add_ns(struct delegpt* dp, struct regional* region,
         struct ub_packed_rrset_key* ns_rrset)
 {
        struct packed_rrset_data* nsdata = (struct packed_rrset_data*)
@@ -324,7 +325,7 @@ delegpt_rrset_add_ns(struct delegpt* dp, struct region* region,
 }
 
 int 
-delegpt_add_rrset_A(struct delegpt* dp, struct region* region,
+delegpt_add_rrset_A(struct delegpt* dp, struct regional* region,
        struct ub_packed_rrset_key* ak)
 {
         struct packed_rrset_data* d=(struct packed_rrset_data*)ak->entry.data;
@@ -347,7 +348,7 @@ delegpt_add_rrset_A(struct delegpt* dp, struct region* region,
 }
 
 int 
-delegpt_add_rrset_AAAA(struct delegpt* dp, struct region* region,
+delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* region,
        struct ub_packed_rrset_key* ak)
 {
         struct packed_rrset_data* d=(struct packed_rrset_data*)ak->entry.data;
@@ -370,7 +371,7 @@ delegpt_add_rrset_AAAA(struct delegpt* dp, struct region* region,
 }
 
 int 
-delegpt_add_rrset(struct delegpt* dp, struct region* region,
+delegpt_add_rrset(struct delegpt* dp, struct regional* region,
         struct ub_packed_rrset_key* rrset)
 {
        if(!rrset)
index 6c4170028ea202b2e94563fa7cfa3fd0feca6ace..ce0ce17539d2a979f6579be7db08526ca6fd30d4 100644 (file)
@@ -43,7 +43,7 @@
 #ifndef ITERATOR_ITER_DELEGPT_H
 #define ITERATOR_ITER_DELEGPT_H
 #include "util/log.h"
-struct region;
+struct regional;
 struct delegpt_ns;
 struct delegpt_addr;
 struct dns_msg;
@@ -110,51 +110,53 @@ struct delegpt_addr {
 
 /**
  * Create new delegation point.
- * @param region: where to allocate it.
+ * @param regional: where to allocate it.
  * @return new delegation point or NULL on error.
  */
-struct delegpt* delegpt_create(struct region* region);
+struct delegpt* delegpt_create(struct regional* regional);
 
 /**
  * Create a copy of a delegation point.
  * @param dp: delegation point to copy.
- * @param region: where to allocate it.
+ * @param regional: where to allocate it.
  * @return new delegation point or NULL on error.
  */
-struct delegpt* delegpt_copy(struct delegpt* dp, struct region* region);
+struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* regional);
 
 /**
  * Set name of delegation point.
  * @param dp: delegation point.
- * @param region: where to allocate the name copy.
+ * @param regional: where to allocate the name copy.
  * @param name: name to use.
  * @return false on error.
  */
-int delegpt_set_name(struct delegpt* dp, struct region* region, uint8_t* name);
+int delegpt_set_name(struct delegpt* dp, struct regional* regional, 
+       uint8_t* name);
 
 /**
  * Add a name to the delegation point.
  * @param dp: delegation point.
- * @param region: where to allocate the info.
+ * @param regional: where to allocate the info.
  * @param name: domain name in wire format.
  * @return false on error.
  */
-int delegpt_add_ns(struct delegpt* dp, struct region* region, uint8_t* name);
+int delegpt_add_ns(struct delegpt* dp, struct regional* regional, 
+       uint8_t* name);
 
 /**
  * Add NS rrset; calls add_ns repeatedly.
  * @param dp: delegation point.
- * @param region: where to allocate the info.
+ * @param regional: where to allocate the info.
  * @param ns_rrset: NS rrset.
  * return 0 on alloc error.
  */
-int delegpt_rrset_add_ns(struct delegpt* dp, struct region* region,
+int delegpt_rrset_add_ns(struct delegpt* dp, struct regional* regional,
        struct ub_packed_rrset_key* ns_rrset);
 
 /**
  * Add target address to the delegation point.
  * @param dp: delegation point.
- * @param region: where to allocate the info.
+ * @param regional: where to allocate the info.
  * @param name: name for which target was found (must be in nslist).
  *     This name is marked resolved.
  * @param namelen: length of name.
@@ -162,49 +164,49 @@ int delegpt_rrset_add_ns(struct delegpt* dp, struct region* region,
  * @param addrlen: the length of addr.
  * @return false on error.
  */
-int delegpt_add_target(struct delegpt* dp, struct region* region
+int delegpt_add_target(struct delegpt* dp, struct regional* regional
        uint8_t* name, size_t namelen, struct sockaddr_storage* addr, 
        socklen_t addrlen);
 
 /**
  * Add A RRset to delegpt.
  * @param dp: delegation point.
- * @param region: where to allocate the info.
+ * @param regional: where to allocate the info.
  * @param rrset: RRset A to add.
  * @return 0 on alloc error.
  */
-int delegpt_add_rrset_A(struct delegpt* dp, struct region* region
+int delegpt_add_rrset_A(struct delegpt* dp, struct regional* regional
        struct ub_packed_rrset_key* rrset);
 
 /**
  * Add AAAA RRset to delegpt.
  * @param dp: delegation point.
- * @param region: where to allocate the info.
+ * @param regional: where to allocate the info.
  * @param rrset: RRset AAAA to add.
  * @return 0 on alloc error.
  */
-int delegpt_add_rrset_AAAA(struct delegpt* dp, struct region* region
+int delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* regional
        struct ub_packed_rrset_key* rrset);
 
 /**
  * Add any RRset to delegpt.
  * @param dp: delegation point.
- * @param region: where to allocate the info.
+ * @param regional: where to allocate the info.
  * @param rrset: RRset to add, NS, A, AAAA.
  * @return 0 on alloc error.
  */
-int delegpt_add_rrset(struct delegpt* dp, struct region* region
+int delegpt_add_rrset(struct delegpt* dp, struct regional* regional
        struct ub_packed_rrset_key* rrset);
 
 /**
  * Add address to the delegation point. No servername is associated or checked.
  * @param dp: delegation point.
- * @param region: where to allocate the info.
+ * @param regional: where to allocate the info.
  * @param addr: the address.
  * @param addrlen: the length of addr.
  * @return false on error.
  */
-int delegpt_add_addr(struct delegpt* dp, struct region* region
+int delegpt_add_addr(struct delegpt* dp, struct regional* regional
        struct sockaddr_storage* addr, socklen_t addrlen);
 
 /** 
@@ -251,11 +253,11 @@ size_t delegpt_count_missing_targets(struct delegpt* dp);
  * find "glue" in either the ADDITIONAL section or the ANSWER section.
  *
  * @param msg: the dns message, referral.
- * @param region: where to allocate delegation point.
+ * @param regional: where to allocate delegation point.
  * @return new delegation point or NULL on alloc error, or if the
  *         message was not appropriate.
  */
 struct delegpt* delegpt_from_message(struct dns_msg* msg, 
-       struct region* region);
+       struct regional* regional);
 
 #endif /* ITERATOR_ITER_DELEGPT_H */
index 0687b3eabb0014820e28326b6db4c8e5e9b56270..3bf4522c865d4b8ddfb216080ec4e157f147ebfc 100644 (file)
@@ -43,7 +43,7 @@
  */
 #include "config.h"
 #include "iterator/iter_donotq.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/log.h"
 #include "util/config_file.h"
 #include "util/net_help.h"
@@ -63,7 +63,7 @@ donotq_create()
                sizeof(struct iter_donotq));
        if(!dq)
                return NULL;
-       dq->region = region_create(malloc, free);
+       dq->region = regional_create();
        if(!dq->region) {
                donotq_delete(dq);
                return NULL;
@@ -76,7 +76,7 @@ donotq_delete(struct iter_donotq* dq)
 {
        if(!dq) 
                return;
-       region_destroy(dq->region);
+       regional_destroy(dq->region);
        free(dq->tree);
        free(dq);
 }
@@ -86,7 +86,7 @@ static int
 donotq_insert(struct iter_donotq* dq, struct sockaddr_storage* addr, 
        socklen_t addrlen)
 {
-       struct iter_donotq_addr* node = region_alloc(dq->region,
+       struct iter_donotq_addr* node = regional_alloc(dq->region,
                sizeof(struct iter_donotq_addr));
        if(!node)
                return 0;
@@ -151,5 +151,5 @@ size_t
 donotq_get_mem(struct iter_donotq* donotq)
 {
        if(!donotq) return 0;
-       return sizeof(*donotq) + region_get_mem(donotq->region);
+       return sizeof(*donotq) + regional_get_mem(donotq->region);
 }
index 72d4de67c00a0ed1655c354b2ef5e7e4625e6e50..d86e3535d4e091b0864f049b6d37207b5ee0996b 100644 (file)
 #include "util/rbtree.h"
 struct iter_env;
 struct config_file;
-struct region;
+struct regional;
 
 /**
  * Iterator donotqueryaddresses structure
  */
 struct iter_donotq {
-       /** region for allocation */
-       struct region* region;
+       /** regional for allocation */
+       struct regional* region;
        /** 
         * Tree of the single addresses that are blocked.
         * contents of type iter_donotq_addr.
index c3da7787210d4e74a1bbe6e0d54bfb0b78ecd407..449a62d9e0db950a167b97c5661821017e6876cc 100644 (file)
@@ -42,7 +42,7 @@
 #include "config.h"
 #include "iterator/iter_fwd.h"
 #include "iterator/iter_delegpt.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/log.h"
 #include "util/config_file.h"
 #include "util/net_help.h"
@@ -70,7 +70,7 @@ forwards_create()
                sizeof(struct iter_forwards));
        if(!fwd)
                return NULL;
-       fwd->region = region_create(malloc, free);
+       fwd->region = regional_create();
        if(!fwd->region) {
                forwards_delete(fwd);
                return NULL;
@@ -83,7 +83,7 @@ forwards_delete(struct iter_forwards* fwd)
 {
        if(!fwd) 
                return;
-       region_destroy(fwd->region);
+       regional_destroy(fwd->region);
        free(fwd->tree);
        free(fwd);
 }
@@ -92,13 +92,13 @@ forwards_delete(struct iter_forwards* fwd)
 static int
 forwards_insert(struct iter_forwards* fwd, uint16_t c, struct delegpt* dp)
 {
-       struct iter_forward_zone* node = region_alloc(fwd->region,
+       struct iter_forward_zone* node = regional_alloc(fwd->region,
                sizeof(struct iter_forward_zone));
        if(!node)
                return 0;
        node->node.key = node;
        node->dclass = c;
-       node->name = region_alloc_init(fwd->region, dp->name, dp->namelen);
+       node->name = regional_alloc_init(fwd->region, dp->name, dp->namelen);
        if(!node->name)
                return 0;
        node->namelen = dp->namelen;
@@ -288,5 +288,5 @@ forwards_get_mem(struct iter_forwards* fwd)
 {
        if(!fwd)
                return 0;
-       return sizeof(*fwd) + region_get_mem(fwd->region);
+       return sizeof(*fwd) + regional_get_mem(fwd->region);
 }
index 8d9743a3654ac4780bcd65719cf94feb5e86ad6d..dca4e648b91739db6f000c4fa1f4ff39448015b2 100644 (file)
 struct iter_env;
 struct config_file;
 struct delegpt;
-struct region;
+struct regional;
 
 /**
  * Iterator forward zones structure
  */
 struct iter_forwards {
-       /** region where forward zone server addresses are allocated */
-       struct region* region;
+       /** regional where forward zone server addresses are allocated */
+       struct regional* region;
        /** 
         * Zones are stored in this tree. Sort order is specially chosen.
         * first sorted on qtype. Then on dname in nsec-like order, so that
index 6866f28936c154a9a935fce1273ee3d2523e1445..dd9c9e121a95fbdd89aa86225abe433245642ce5 100644 (file)
@@ -42,7 +42,7 @@
 #include "config.h"
 #include "iterator/iter_hints.h"
 #include "iterator/iter_delegpt.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/log.h"
 #include "util/config_file.h"
 #include "util/net_help.h"
@@ -70,7 +70,7 @@ hints_create()
                sizeof(struct iter_hints));
        if(!hints)
                return NULL;
-       hints->region = region_create(malloc, free);
+       hints->region = regional_create();
        if(!hints->region) {
                hints_delete(hints);
                return NULL;
@@ -83,14 +83,14 @@ hints_delete(struct iter_hints* hints)
 {
        if(!hints) 
                return;
-       region_destroy(hints->region);
+       regional_destroy(hints->region);
        free(hints->tree);
        free(hints);
 }
 
 /** add hint to delegation hints */
 static int
-ah(struct delegpt* dp, struct region* r, const char* sv, const char* ip)
+ah(struct delegpt* dp, struct regional* r, const char* sv, const char* ip)
 {
        struct sockaddr_storage addr;
        socklen_t addrlen;
@@ -112,7 +112,7 @@ ah(struct delegpt* dp, struct region* r, const char* sv, const char* ip)
 
 /** obtain compiletime provided root hints */
 static struct delegpt* 
-compile_time_root_prime(struct region* r)
+compile_time_root_prime(struct regional* r)
 {
        /* from:
         ;       This file is made available by InterNIC
@@ -149,13 +149,13 @@ compile_time_root_prime(struct region* r)
 static int
 hints_insert(struct iter_hints* hints, uint16_t c, struct delegpt* dp)
 {
-       struct iter_hints_stub* node = region_alloc(hints->region,
+       struct iter_hints_stub* node = regional_alloc(hints->region,
                sizeof(struct iter_hints_stub));
        if(!node)
                return 0;
        node->node.key = node;
        node->hint_class = c;
-       node->name = region_alloc_init(hints->region, dp->name, dp->namelen);
+       node->name = regional_alloc_init(hints->region, dp->name, dp->namelen);
        if(!node->name)
                return 0;
        node->namelen = dp->namelen;
@@ -379,5 +379,5 @@ size_t
 hints_get_mem(struct iter_hints* hints)
 {
        if(!hints) return 0;
-       return sizeof(*hints) + region_get_mem(hints->region);
+       return sizeof(*hints) + regional_get_mem(hints->region);
 }
index 35f559ce92120d6a2d2fe1a18c4b5fb9aca4997e..363bdf209493441c14003cd5f44376dfa7c81b4d 100644 (file)
 struct iter_env;
 struct config_file;
 struct delegpt;
-struct region;
+struct regional;
 
 /**
  * Iterator hints structure
  */
 struct iter_hints {
-       /** region where hints are allocated */
-       struct region* region;
+       /** regional where hints are allocated */
+       struct regional* region;
        /** 
         * Hints are stored in this tree. Sort order is specially chosen.
         * first sorted on qtype. Then on dname in nsec-like order, so that
index 6edd7620fd2513341ce129c93c5fff7ad1462959..50939cd7f5f5e3c96524959a26b4077e06ac2184 100644 (file)
@@ -44,7 +44,7 @@
 #include "services/cache/rrset.h"
 #include "util/log.h"
 #include "util/net_help.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/config_file.h"
 #include "util/module.h"
 #include "util/data/msgparse.h"
@@ -224,22 +224,22 @@ synth_cname(uint8_t* qname, size_t qnamelen, struct rrset_parse* dname_rrset,
 /** synthesize a CNAME rrset */
 static struct rrset_parse*
 synth_cname_rrset(uint8_t** sname, size_t* snamelen, uint8_t* alias, 
-       size_t aliaslen, struct region* region, struct msg_parse* msg, 
+       size_t aliaslen, struct regional* region, struct msg_parse* msg, 
        struct rrset_parse* rrset, struct rrset_parse* prev,
        struct rrset_parse* nx, ldns_buffer* pkt)
 {
-       struct rrset_parse* cn = (struct rrset_parse*)region_alloc(region,
+       struct rrset_parse* cn = (struct rrset_parse*)regional_alloc(region,
                sizeof(struct rrset_parse));
        if(!cn)
                return NULL;
        memset(cn, 0, sizeof(*cn));
-       cn->rr_first = (struct rr_parse*)region_alloc(region, 
+       cn->rr_first = (struct rr_parse*)regional_alloc(region, 
                sizeof(struct rr_parse));
        if(!cn->rr_first)
                return NULL;
        cn->rr_last = cn->rr_first;
        /* CNAME from sname to alias */
-       cn->dname = (uint8_t*)region_alloc(region, *snamelen);
+       cn->dname = (uint8_t*)regional_alloc(region, *snamelen);
        if(!cn->dname)
                return NULL;
        dname_pkt_copy(pkt, cn->dname, *sname);
@@ -253,7 +253,7 @@ synth_cname_rrset(uint8_t** sname, size_t* snamelen, uint8_t* alias,
        /* allocate TTL + rdatalen + uncompressed dname */
        memset(cn->rr_first, 0, sizeof(struct rr_parse));
        cn->rr_first->outside_packet = 1;
-       cn->rr_first->ttl_data = (uint8_t*)region_alloc(region, 
+       cn->rr_first->ttl_data = (uint8_t*)regional_alloc(region, 
                sizeof(uint32_t)+sizeof(uint16_t)+aliaslen);
        if(!cn->rr_first->ttl_data)
                return NULL;
@@ -312,7 +312,7 @@ pkt_sub(ldns_buffer* pkt, uint8_t* comprname, uint8_t* zone)
  */
 static int
 scrub_normalize(ldns_buffer* pkt, struct msg_parse* msg, 
-       struct query_info* qinfo, struct region* region)
+       struct query_info* qinfo, struct regional* region)
 {
        uint8_t* sname = qinfo->qname;
        size_t snamelen = qinfo->qname_len;
@@ -545,7 +545,7 @@ scrub_sanitize(ldns_buffer* pkt, struct msg_parse* msg, uint8_t* zonename,
 
 int 
 scrub_message(ldns_buffer* pkt, struct msg_parse* msg, 
-       struct query_info* qinfo, uint8_t* zonename, struct region* region,
+       struct query_info* qinfo, uint8_t* zonename, struct regional* region,
        struct module_env* env)
 {
        /* basic sanity checks */
index 0ac5768bf04ae814d98ef06d6a954176c2bef687..7ec9b76e1feaecc769f202441e457e24a9da1cd9 100644 (file)
@@ -44,7 +44,7 @@
 #define ITERATOR_ITER_SCRUB_H
 struct msg_parse;
 struct query_info;
-struct region;
+struct regional;
 struct module_env;
 
 /**
@@ -55,12 +55,12 @@ struct module_env;
  * @param qinfo: the query info that was sent to the server. Checked.
  * @param zonename: the name of the last delegation point.
  *     Used to determine out of bailiwick information.
- * @param region: where to allocate (new) parts of the message.
+ * @param regional: where to allocate (new) parts of the message.
  * @param env: module environment with config settings and cache. 
  * @return: false if the message is total waste. true if scrubbed with success.
  */
 int scrub_message(ldns_buffer* pkt, struct msg_parse* msg, 
-       struct query_info* qinfo, uint8_t* zonename, struct region* region,
+       struct query_info* qinfo, uint8_t* zonename, struct regional* regional,
        struct module_env* env);
 
 #endif /* ITERATOR_ITER_SCRUB_H */
index b07711a6ba9f4ee46c3c1518604545afd6784770..1c2dc111485d768a285c4fad70fbb5810c5eb0d2 100644 (file)
@@ -53,7 +53,7 @@
 #include "util/module.h"
 #include "util/log.h"
 #include "util/config_file.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/data/msgparse.h"
 #include "util/data/dname.h"
 #include "util/random.h"
@@ -243,9 +243,10 @@ iter_server_selection(struct iter_env* iter_env,
 }
 
 struct dns_msg* 
-dns_alloc_msg(ldns_buffer* pkt, struct msg_parse* msg, struct region* region)
+dns_alloc_msg(ldns_buffer* pkt, struct msg_parse* msg, 
+       struct regional* region)
 {
-       struct dns_msg* m = (struct dns_msg*)region_alloc(region,
+       struct dns_msg* m = (struct dns_msg*)regional_alloc(region,
                sizeof(struct dns_msg));
        if(!m)
                return NULL;
@@ -258,14 +259,14 @@ dns_alloc_msg(ldns_buffer* pkt, struct msg_parse* msg, struct region* region)
 }
 
 struct dns_msg* 
-dns_copy_msg(struct dns_msg* from, struct region* region)
+dns_copy_msg(struct dns_msg* from, struct regional* region)
 {
-       struct dns_msg* m = (struct dns_msg*)region_alloc(region,
+       struct dns_msg* m = (struct dns_msg*)regional_alloc(region,
                sizeof(struct dns_msg));
        if(!m)
                return NULL;
        m->qinfo = from->qinfo;
-       if(!(m->qinfo.qname = region_alloc_init(region, from->qinfo.qname,
+       if(!(m->qinfo.qname = regional_alloc_init(region, from->qinfo.qname,
                from->qinfo.qname_len)))
                return NULL;
        if(!(m->rep = reply_info_copy(from->rep, NULL, region)))
index 6cc7a6c0146685354c9d3e4f2fd8c62ce25f2978..8b0c1c83ea6ba31522a408b9d34d857f2717f23e 100644 (file)
@@ -47,7 +47,7 @@ struct config_file;
 struct module_env;
 struct delegpt_addr;
 struct delegpt;
-struct region;
+struct regional;
 struct msg_parse;
 struct ub_randstate;
 struct query_info;
@@ -81,22 +81,22 @@ struct delegpt_addr* iter_server_selection(struct iter_env* iter_env,
        size_t namelen);
 
 /**
- * Allocate dns_msg from parsed msg, in region.
+ * Allocate dns_msg from parsed msg, in regional.
  * @param pkt: packet.
- * @param msg: parsed message (cleaned and ready for region allocation).
- * @param region: region to use for allocation.
+ * @param msg: parsed message (cleaned and ready for regional allocation).
+ * @param regional: regional to use for allocation.
  * @return newly allocated dns_msg, or NULL on memory error.
  */
 struct dns_msg* dns_alloc_msg(ldns_buffer* pkt, struct msg_parse* msg, 
-       struct region* region);
+       struct regional* regional);
 
 /**
- * Copy a dns_msg to this region.
- * @param from: dns message, also in region.
- * @param region: region to use for allocation.
+ * Copy a dns_msg to this regional.
+ * @param from: dns message, also in regional.
+ * @param regional: regional to use for allocation.
  * @return newly allocated dns_msg, or NULL on memory error.
  */
-struct dns_msg* dns_copy_msg(struct dns_msg* from, struct region* region);
+struct dns_msg* dns_copy_msg(struct dns_msg* from, struct regional* regional);
 
 /**
  * Allocate a dns_msg with malloc/alloc structure and store in dns cache.
index 3890a67e80656a95103e32bb81d75e93a38e0525..eb0e9269e85a811c817b717c877957530690f232 100644 (file)
@@ -54,7 +54,7 @@
 #include "util/module.h"
 #include "util/netevent.h"
 #include "util/net_help.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/data/dname.h"
 #include "util/data/msgencode.h"
 #include "util/fptr_wlist.h"
@@ -94,7 +94,7 @@ iter_deinit(struct module_env* env, int id)
 static int
 iter_new(struct module_qstate* qstate, int id)
 {
-       struct iter_qstate* iq = (struct iter_qstate*)region_alloc(
+       struct iter_qstate* iq = (struct iter_qstate*)regional_alloc(
                qstate->region, sizeof(struct iter_qstate));
        qstate->minfo[id] = iq;
        if(!iq) 
@@ -225,7 +225,7 @@ error_response(struct module_qstate* qstate, int id, int rcode)
 /** prepend the prepend list in the answer and authority section of dns_msg */
 static int
 iter_prepend(struct iter_qstate* iq, struct dns_msg* msg, 
-       struct region* region)
+       struct regional* region)
 {
        struct iter_prep_list* p;
        struct ub_packed_rrset_key** sets;
@@ -237,7 +237,7 @@ iter_prepend(struct iter_qstate* iq, struct dns_msg* msg,
        if(num_an + num_ns == 0)
                return 1;
        verbose(VERB_ALGO, "prepending %d rrsets", (int)num_an + (int)num_ns);
-       sets = region_alloc(region, (num_an+num_ns+msg->rep->rrset_count) *
+       sets = regional_alloc(region, (num_an+num_ns+msg->rep->rrset_count) *
                sizeof(struct ub_packed_rrset_key*));
        if(!sets) 
                return 0;
@@ -281,7 +281,7 @@ static int
 iter_add_prepend_answer(struct module_qstate* qstate, struct iter_qstate* iq,
        struct ub_packed_rrset_key* rrset)
 {
-       struct iter_prep_list* p = (struct iter_prep_list*)region_alloc(
+       struct iter_prep_list* p = (struct iter_prep_list*)regional_alloc(
                qstate->region, sizeof(struct iter_prep_list));
        if(!p)
                return 0;
@@ -306,7 +306,7 @@ static int
 iter_add_prepend_auth(struct module_qstate* qstate, struct iter_qstate* iq,
        struct ub_packed_rrset_key* rrset)
 {
-       struct iter_prep_list* p = (struct iter_prep_list*)region_alloc(
+       struct iter_prep_list* p = (struct iter_prep_list*)regional_alloc(
                qstate->region, sizeof(struct iter_prep_list));
        if(!p)
                return 0;
@@ -440,7 +440,7 @@ generate_sub_request(uint8_t* qname, size_t qnamelen, uint16_t qtype,
                /* initialise the new subquery */
                subq->curmod = id;
                subq->ext_state[id] = module_state_initial;
-               subq->minfo[id] = region_alloc(subq->region, 
+               subq->minfo[id] = regional_alloc(subq->region, 
                        sizeof(struct iter_qstate));
                if(!subq->minfo[id]) {
                        log_err("init subq: out of memory");
@@ -1641,7 +1641,7 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq,
        }
 
        /* parse message */
-       prs = (struct msg_parse*)region_alloc(qstate->env->scratch, 
+       prs = (struct msg_parse*)regional_alloc(qstate->env->scratch, 
                sizeof(struct msg_parse));
        if(!prs) {
                log_err("out of memory on incoming message");
index 5d0c8cf4b4135cf17cc0509ab2b8593c13e4f3a3..a05665f886d7232e66f638157f5bff3c719c96f1 100644 (file)
@@ -47,7 +47,7 @@
 #include "util/data/dname.h"
 #include "util/module.h"
 #include "util/net_help.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 
 /** store rrsets in the rrset cache. 
  * @param env: module environment with caches.
@@ -103,10 +103,10 @@ dns_cache_store_msg(struct module_env* env, struct query_info* qinfo,
 
 /** allocate rrset in region - no more locks needed */
 static struct ub_packed_rrset_key*
-copy_rrset(struct ub_packed_rrset_key* key, struct region* region, 
+copy_rrset(struct ub_packed_rrset_key* key, struct regional* region, 
        uint32_t now)
 {
-       struct ub_packed_rrset_key* ck = region_alloc(region, 
+       struct ub_packed_rrset_key* ck = regional_alloc(region, 
                sizeof(struct ub_packed_rrset_key));
        struct packed_rrset_data* d;
        struct packed_rrset_data* data = (struct packed_rrset_data*)
@@ -119,12 +119,12 @@ copy_rrset(struct ub_packed_rrset_key* key, struct region* region,
        ck->entry.hash = key->entry.hash;
        ck->entry.key = ck;
        ck->rk = key->rk;
-       ck->rk.dname = region_alloc_init(region, key->rk.dname, 
+       ck->rk.dname = regional_alloc_init(region, key->rk.dname, 
                key->rk.dname_len);
        if(!ck->rk.dname)
                return NULL;
        dsize = packed_rrset_sizeof(data);
-       d = (struct packed_rrset_data*)region_alloc_init(region, data, dsize);
+       d = (struct packed_rrset_data*)regional_alloc_init(region, data, dsize);
        if(!d)
                return NULL;
        ck->entry.data = d;
@@ -167,7 +167,7 @@ find_closest_of_type(struct module_env* env, uint8_t* qname, size_t qnamelen,
 
 /** add addr to additional section */
 static void
-addr_to_additional(struct ub_packed_rrset_key* rrset, struct region* region,
+addr_to_additional(struct ub_packed_rrset_key* rrset, struct regional* region,
        struct dns_msg* msg, uint32_t now)
 {
        if((msg->rep->rrsets[msg->rep->rrset_count] = 
@@ -179,8 +179,9 @@ addr_to_additional(struct ub_packed_rrset_key* rrset, struct region* region,
 
 /** find and add A and AAAA records for nameservers in delegpt */
 static int
-find_add_addrs(struct module_env* env, uint16_t qclass, struct region* region,
-       struct delegpt* dp, uint32_t now, struct dns_msg** msg)
+find_add_addrs(struct module_env* env, uint16_t qclass, 
+       struct regional* region, struct delegpt* dp, uint32_t now, 
+       struct dns_msg** msg)
 {
        struct delegpt_ns* ns;
        struct ub_packed_rrset_key* akey;
@@ -214,7 +215,7 @@ find_add_addrs(struct module_env* env, uint16_t qclass, struct region* region,
 /** find and add A and AAAA records for missing nameservers in delegpt */
 int
 cache_fill_missing(struct module_env* env, uint16_t qclass, 
-       struct region* region, struct delegpt* dp)
+       struct regional* region, struct delegpt* dp)
 {
        struct delegpt_ns* ns;
        struct ub_packed_rrset_key* akey;
@@ -250,7 +251,7 @@ cache_fill_missing(struct module_env* env, uint16_t qclass,
 
 /** find and add DS or NSEC to delegation msg */
 static void
-find_add_ds(struct module_env* env, struct region* region, 
+find_add_ds(struct module_env* env, struct regional* region, 
        struct dns_msg* msg, struct delegpt* dp, uint32_t now)
 {
        /* Lookup the DS or NSEC at the delegation point. */
@@ -281,21 +282,21 @@ find_add_ds(struct module_env* env, struct region* region,
 /** create referral message with NS and query */
 static struct dns_msg*
 create_msg(uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, 
-       struct region* region, struct ub_packed_rrset_key* nskey, 
+       struct regional* region, struct ub_packed_rrset_key* nskey, 
        struct packed_rrset_data* nsdata, uint32_t now)
 {
-       struct dns_msg* msg = (struct dns_msg*)region_alloc(region,
+       struct dns_msg* msg = (struct dns_msg*)regional_alloc(region,
                sizeof(struct dns_msg));
        if(!msg)
                return NULL;
-       msg->qinfo.qname = region_alloc_init(region, qname, qnamelen);
+       msg->qinfo.qname = regional_alloc_init(region, qname, qnamelen);
        if(!msg->qinfo.qname)
                return NULL;
        msg->qinfo.qname_len = qnamelen;
        msg->qinfo.qtype = qtype;
        msg->qinfo.qclass = qclass;
        /* non-packed reply_info, because it needs to grow the array */
-       msg->rep = (struct reply_info*)region_alloc(region, 
+       msg->rep = (struct reply_info*)regional_alloc(region, 
                sizeof(struct reply_info)-sizeof(struct rrset_ref));
        if(!msg->rep)
                return NULL;
@@ -308,7 +309,8 @@ create_msg(uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass,
         *      A rrset for every NS RR
         *      AAAA rrset for every NS RR
         */
-       msg->rep->rrsets = (struct ub_packed_rrset_key**)region_alloc(region,
+       msg->rep->rrsets = (struct ub_packed_rrset_key**)
+               regional_alloc(region, 
                (2 + nsdata->count*2)*sizeof(struct ub_packed_rrset_key*));
        if(!msg->rep->rrsets)
                return NULL;
@@ -323,7 +325,7 @@ create_msg(uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass,
 struct delegpt* 
 dns_cache_find_delegation(struct module_env* env, uint8_t* qname, 
        size_t qnamelen, uint16_t qtype, uint16_t qclass, 
-       struct region* region, struct dns_msg** msg, uint32_t now)
+       struct regional* region, struct dns_msg** msg, uint32_t now)
 {
        /* try to find closest NS rrset */
        struct ub_packed_rrset_key* nskey;
@@ -366,22 +368,23 @@ dns_cache_find_delegation(struct module_env* env, uint8_t* qname,
 
 /** allocate dns_msg from query_info and reply_info */
 static struct dns_msg*
-gen_dns_msg(struct region* region, struct query_info* q, size_t num)
+gen_dns_msg(struct regional* region, struct query_info* q, size_t num)
 {
-       struct dns_msg* msg = (struct dns_msg*)region_alloc(region, 
+       struct dns_msg* msg = (struct dns_msg*)regional_alloc(region, 
                sizeof(struct dns_msg));
        if(!msg)
                return NULL;
        memcpy(&msg->qinfo, q, sizeof(struct query_info));
-       msg->qinfo.qname = region_alloc_init(region, q->qname, q->qname_len);
+       msg->qinfo.qname = regional_alloc_init(region, q->qname, q->qname_len);
        if(!msg->qinfo.qname)
                return NULL;
        /* allocate replyinfo struct and rrset key array separately */
-       msg->rep = (struct reply_info*)region_alloc(region,
+       msg->rep = (struct reply_info*)regional_alloc(region,
                sizeof(struct reply_info) - sizeof(struct rrset_ref));
        if(!msg->rep)
                return NULL;
-       msg->rep->rrsets = (struct ub_packed_rrset_key**)region_alloc(region,
+       msg->rep->rrsets = (struct ub_packed_rrset_key**)
+               regional_alloc(region,
                num * sizeof(struct ub_packed_rrset_key*));
        if(!msg->rep->rrsets)
                return NULL;
@@ -391,7 +394,7 @@ gen_dns_msg(struct region* region, struct query_info* q, size_t num)
 /** generate dns_msg from cached message */
 static struct dns_msg*
 tomsg(struct module_env* env, struct msgreply_entry* e, struct reply_info* r, 
-       struct region* region, uint32_t now, struct region* scratch)
+       struct regional* region, uint32_t now, struct regional* scratch)
 {
        struct dns_msg* msg;
        size_t i;
@@ -424,7 +427,7 @@ tomsg(struct module_env* env, struct msgreply_entry* e, struct reply_info* r,
 
 /** synthesize RRset-only response from cached RRset item */
 static struct dns_msg*
-rrset_msg(struct ub_packed_rrset_key* rrset, struct region* region, 
+rrset_msg(struct ub_packed_rrset_key* rrset, struct regional* region, 
        uint32_t now, struct query_info* q)
 {
        struct dns_msg* msg;
@@ -451,7 +454,7 @@ rrset_msg(struct ub_packed_rrset_key* rrset, struct region* region,
 
 /** synthesize DNAME+CNAME response from cached DNAME item */
 static struct dns_msg*
-synth_dname_msg(struct ub_packed_rrset_key* rrset, struct region* region, 
+synth_dname_msg(struct ub_packed_rrset_key* rrset, struct regional* region, 
        uint32_t now, struct query_info* q)
 {
        struct dns_msg* msg;
@@ -485,7 +488,7 @@ synth_dname_msg(struct ub_packed_rrset_key* rrset, struct region* region,
                msg->rep->flags |= LDNS_RCODE_YXDOMAIN;
                return msg;
        }
-       newname = (uint8_t*)region_alloc(region, newlen);
+       newname = (uint8_t*)regional_alloc(region, newlen);
        if(!newname)
                return NULL;
        /* new name is concatenation of qname front (without DNAME owner)
@@ -493,7 +496,7 @@ synth_dname_msg(struct ub_packed_rrset_key* rrset, struct region* region,
        memcpy(newname, q->qname, q->qname_len-rrset->rk.dname_len);
        memmove(newname+(q->qname_len-rrset->rk.dname_len), dtarg, dtarglen);
        /* create rest of CNAME rrset */
-       ck = (struct ub_packed_rrset_key*)region_alloc(region, 
+       ck = (struct ub_packed_rrset_key*)regional_alloc(region, 
                sizeof(struct ub_packed_rrset_key));
        if(!ck)
                return NULL;
@@ -503,12 +506,12 @@ synth_dname_msg(struct ub_packed_rrset_key* rrset, struct region* region,
        ck->rk.type = htons(LDNS_RR_TYPE_CNAME);
        ck->rk.rrset_class = rrset->rk.rrset_class;
        ck->rk.flags = 0;
-       ck->rk.dname = region_alloc_init(region, q->qname, q->qname_len);
+       ck->rk.dname = regional_alloc_init(region, q->qname, q->qname_len);
        if(!ck->rk.dname)
                return NULL;
        ck->rk.dname_len = q->qname_len;
        ck->entry.hash = rrset_key_hash(&ck->rk);
-       newd = (struct packed_rrset_data*)region_alloc(region,
+       newd = (struct packed_rrset_data*)regional_alloc(region,
                sizeof(struct packed_rrset_data) + sizeof(size_t) + 
                sizeof(uint8_t*) + sizeof(uint32_t) + sizeof(uint16_t) 
                + newlen);
@@ -535,7 +538,7 @@ synth_dname_msg(struct ub_packed_rrset_key* rrset, struct region* region,
 struct dns_msg* 
 dns_cache_lookup(struct module_env* env,
        uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass,
-       struct region* region, struct region* scratch)
+       struct regional* region, struct regional* scratch)
 {
        struct lruhash_entry* e;
        struct query_info k;
index 33303883c277b92491fac2b13418b1eb0b596693..152c44ad2968a8f7905d9185691da15d2c9b4e8b 100644 (file)
@@ -46,7 +46,7 @@
 struct module_env;
 struct query_info;
 struct reply_info;
-struct region;
+struct regional;
 struct delegpt;
 
 /**
@@ -107,7 +107,7 @@ void dns_cache_store_msg(struct module_env* env, struct query_info* qinfo,
  */
 struct delegpt* dns_cache_find_delegation(struct module_env* env, 
        uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, 
-       struct region* region, struct dns_msg** msg, uint32_t timenow);
+       struct regional* region, struct dns_msg** msg, uint32_t timenow);
 
 /** 
  * Find cached message 
@@ -124,7 +124,7 @@ struct delegpt* dns_cache_find_delegation(struct module_env* env,
  */
 struct dns_msg* dns_cache_lookup(struct module_env* env,
        uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass,
-       struct region* region, struct region* scratch);
+       struct regional* region, struct regional* scratch);
 
 /** 
  * find and add A and AAAA records for missing nameservers in delegpt 
@@ -135,7 +135,7 @@ struct dns_msg* dns_cache_lookup(struct module_env* env,
  * @return false on alloc failure.
  */
 int cache_fill_missing(struct module_env* env, uint16_t qclass, 
-       struct region* region, struct delegpt* dp);
+       struct regional* region, struct delegpt* dp);
 
 /** Find covering DNAME */
 
index 431a660b9a3f47fefea357b0e08d7ad347c2114c..523d12bc02f884170f91ad1574dc78b2b8a5b3fc 100644 (file)
@@ -44,7 +44,7 @@
 #include "util/config_file.h"
 #include "util/data/packed_rrset.h"
 #include "util/data/msgreply.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/alloc.h"
 
 struct rrset_cache* rrset_cache_create(struct config_file* cfg, 
@@ -287,12 +287,12 @@ rrset_array_unlock(struct rrset_ref* ref, size_t count)
 }
 
 void 
-rrset_array_unlock_touch(struct rrset_cache* r, struct region* scratch,         
+rrset_array_unlock_touch(struct rrset_cache* r, struct regional* scratch,
        struct rrset_ref* ref, size_t count)
 {
        hashvalue_t* h;
        size_t i;
-       if(!(h = (hashvalue_t*)region_alloc(scratch, 
+       if(!(h = (hashvalue_t*)regional_alloc(scratch, 
                sizeof(hashvalue_t)*count)))
                log_warn("rrset LRU: memory allocation failed");
        else    /* store hash values */
index 3fcee79eb4cc38fd32b22c4c1f0c9b81506489be..46239e06588ceb3a837aebc76852d9d970afd6de 100644 (file)
@@ -47,7 +47,7 @@
 struct config_file;
 struct alloc_cache;
 struct rrset_ref;
-struct region;
+struct regional;
 
 /**
  * The rrset cache
@@ -181,7 +181,7 @@ void rrset_array_unlock(struct rrset_ref* ref, size_t count);
  *     duplicate references are allowed and handled.
  * @param count: size of array.
  */
-void rrset_array_unlock_touch(struct rrset_cache* r, struct region* scratch,
+void rrset_array_unlock_touch(struct rrset_cache* r, struct regional* scratch,
        struct rrset_ref* ref, size_t count);
 
 /**
index 35dcb9306bcd39ef5844455af404ebc573477921..1ec5ca8c4f78d13e7533f0288bcb88845ecc0ae3 100644 (file)
@@ -49,7 +49,7 @@
 #include "util/log.h"
 #include "util/net_help.h"
 #include "util/module.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/data/msgencode.h"
 #include "util/timehist.h"
 #include "util/fptr_wlist.h"
@@ -195,15 +195,15 @@ struct mesh_state*
 mesh_state_create(struct module_env* env, struct query_info* qinfo, 
        uint16_t qflags, int prime)
 {
-       region_type* region = region_create(malloc, free);
+       struct regional* region = regional_create();
        struct mesh_state* mstate;
        int i;
        if(!region)
                return NULL;
-       mstate = (struct mesh_state*)region_alloc(region, 
+       mstate = (struct mesh_state*)regional_alloc(region, 
                sizeof(struct mesh_state));
        if(!mstate) {
-               region_destroy(region);
+               regional_destroy(region);
                return NULL;
        }
        memset(mstate, 0, sizeof(*mstate));
@@ -219,10 +219,10 @@ mesh_state_create(struct module_env* env, struct query_info* qinfo,
        mstate->s.qinfo.qtype = qinfo->qtype;
        mstate->s.qinfo.qclass = qinfo->qclass;
        mstate->s.qinfo.qname_len = qinfo->qname_len;
-       mstate->s.qinfo.qname = region_alloc_init(region, qinfo->qname,
+       mstate->s.qinfo.qname = regional_alloc_init(region, qinfo->qname,
                qinfo->qname_len);
        if(!mstate->s.qinfo.qname) {
-               region_destroy(region);
+               regional_destroy(region);
                return NULL;
        }
        /* remove all weird bits from qflags */
@@ -258,7 +258,7 @@ mesh_state_cleanup(struct mesh_state* mstate)
                mstate->s.minfo[i] = NULL;
                mstate->s.ext_state[i] = module_finished;
        }
-       region_destroy(mstate->s.region);
+       regional_destroy(mstate->s.region);
 }
 
 void 
@@ -349,9 +349,9 @@ int mesh_state_attachment(struct mesh_state* super, struct mesh_state* sub)
        struct rbnode_t* n;
        struct mesh_state_ref* subref; /* points to sub, inserted in super */
        struct mesh_state_ref* superref; /* points to super, inserted in sub */
-       if( !(subref = region_alloc(super->s.region,
+       if( !(subref = regional_alloc(super->s.region,
                sizeof(struct mesh_state_ref))) ||
-               !(superref = region_alloc(sub->s.region,
+               !(superref = regional_alloc(sub->s.region,
                sizeof(struct mesh_state_ref))) ) {
                log_err("mesh_state_attachment: out of memory");
                return 0;
@@ -516,7 +516,7 @@ struct mesh_state* mesh_area_find(struct mesh_area* mesh,
 int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
         struct comm_reply* rep, uint16_t qid, uint16_t qflags)
 {
-       struct mesh_reply* r = region_alloc(s->s.region, 
+       struct mesh_reply* r = regional_alloc(s->s.region, 
                sizeof(struct mesh_reply));
        if(!r)
                return 0;
@@ -607,7 +607,7 @@ void mesh_run(struct mesh_area* mesh, struct mesh_state* mstate,
 
                /* examine results */
                mstate->s.reply = NULL;
-               region_free_all(mstate->s.env->scratch);
+               regional_free_all(mstate->s.env->scratch);
                s = mstate->s.ext_state[mstate->s.curmod];
                verbose(VERB_ALGO, "mesh_run: %s module exit state is %s", 
                        mesh->modfunc[mstate->s.curmod]->name, strextstate(s));
@@ -675,7 +675,7 @@ mesh_get_mem(struct mesh_area* mesh)
                sizeof(struct th_buck)*mesh->histogram->num;
        RBTREE_FOR(m, struct mesh_state*, &mesh->all) {
                /* all, including m itself allocated in qstate region */
-               s += region_get_mem(m->s.region);
+               s += regional_get_mem(m->s.region);
        }
        return s;
 }
index 43e5c37234b1c159ff97a3bd571acdabbecd9ecd..8ec4da8a875bd36bcca20b3c29e544cfb62e1bd2 100644 (file)
@@ -45,7 +45,7 @@
 #include "util/data/msgreply.h"
 #include "util/data/msgencode.h"
 #include "util/alloc.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/net_help.h"
 #include "testcode/readhex.h"
 
@@ -258,7 +258,7 @@ testpkt(ldns_buffer* pkt, struct alloc_cache* alloc, ldns_buffer* out,
        uint16_t id;
        uint16_t flags;
        uint32_t timenow = 0;
-       region_type *region = region_create(malloc, free);
+       struct regional* region = regional_create();
        struct edns_data edns;
 
        hex_to_buf(pkt, hex);
@@ -307,7 +307,7 @@ testpkt(ldns_buffer* pkt, struct alloc_cache* alloc, ldns_buffer* out,
 
        query_info_clear(&qi);
        reply_info_parsedelete(rep, alloc);
-       region_destroy(region);
+       regional_destroy(region);
 }
 
 /** simple test of parsing */
index 2936309fe4eca1a703ccb8498d41cef48f1ee82e..66462c774f7877e7c4be5628576894156d7c9460 100644 (file)
@@ -49,7 +49,7 @@
 #include "util/data/msgreply.h"
 #include "util/data/msgparse.h"
 #include "util/data/dname.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/alloc.h"
 #include "util/rbtree.h"
 #include "util/net_help.h"
@@ -86,8 +86,8 @@ entry_to_buf(struct entry* e, ldns_buffer* pkt)
 
 /** entry to reply info conversion */
 static void
-entry_to_repinfo(struct entry* e, struct alloc_cache* alloc, struct region* 
-       region, ldns_buffer* pkt, struct query_info* qi, 
+entry_to_repinfo(struct entry* e, struct alloc_cache* alloc, 
+       struct regional* region, ldns_buffer* pkt, struct query_info* qi, 
        struct reply_info** rep)
 {
        int ret;
@@ -109,8 +109,8 @@ entry_to_repinfo(struct entry* e, struct alloc_cache* alloc, struct region*
 
 /** extract DNSKEY rrset from answer and convert it */
 static struct ub_packed_rrset_key* 
-extract_keys(struct entry* e, struct alloc_cache* alloc, struct region*
-        region, ldns_buffer* pkt)
+extract_keys(struct entry* e, struct alloc_cache* alloc, 
+       struct regional* region, ldns_buffer* pkt)
 {
        struct ub_packed_rrset_key* dnskey = NULL;
        struct query_info qinfo;
@@ -167,15 +167,16 @@ verifytest_rrset(struct module_env* env, struct val_env* ve,
 
 /** verify and test an entry - every rr in the message */
 static void
-verifytest_entry(struct entry* e, struct alloc_cache* alloc, struct region*
-        region, ldns_buffer* pkt, struct ub_packed_rrset_key* dnskey,
-       struct module_env* env, struct val_env* ve)
+verifytest_entry(struct entry* e, struct alloc_cache* alloc, 
+       struct regional* region, ldns_buffer* pkt, 
+       struct ub_packed_rrset_key* dnskey, struct module_env* env, 
+       struct val_env* ve)
 {
        struct query_info qinfo;
        struct reply_info* rep = NULL;
        size_t i;
 
-       region_free_all(region);
+       regional_free_all(region);
        if(vsig) {
                printf("verifying pkt:\n");
                ldns_pkt_print(stdout, e->reply_list->reply);
@@ -205,15 +206,15 @@ find_rrset_type(struct reply_info* rep, uint16_t type)
 
 /** DS sig test an entry - get DNSKEY and DS in entry and verify */
 static void
-dstest_entry(struct entry* e, struct alloc_cache* alloc, struct region*
-        region, ldns_buffer* pkt, struct module_env* env)
+dstest_entry(struct entry* e, struct alloc_cache* alloc, 
+       struct regional* region, ldns_buffer* pkt, struct module_env* env)
 {
        struct query_info qinfo;
        struct reply_info* rep = NULL;
        struct ub_packed_rrset_key* ds, *dnskey;
        int ret;
 
-       region_free_all(region);
+       regional_free_all(region);
        if(vsig) {
                printf("verifying DS-DNSKEY match:\n");
                ldns_pkt_print(stdout, e->reply_list->reply);
@@ -255,7 +256,7 @@ verifytest_file(const char* fname, const char* at_date)
         * The answer rrset is the keyset that will be used for verification
         */
        struct ub_packed_rrset_key* dnskey;
-       struct region* region = region_create(malloc, free);
+       struct regional* region = regional_create();
        struct alloc_cache alloc;
        ldns_buffer* buf = ldns_buffer_new(65535);
        struct entry* e;
@@ -282,7 +283,7 @@ verifytest_file(const char* fname, const char* at_date)
        }
 
        delete_entry(list);
-       region_destroy(region);
+       regional_destroy(region);
        alloc_clear(&alloc);
        ldns_buffer_free(buf);
 }
@@ -296,7 +297,7 @@ dstest_file(const char* fname)
         * The first entry must be a query for DNSKEY.
         * The answer rrset is the keyset that will be used for verification
         */
-       struct region* region = region_create(malloc, free);
+       struct regional* region = regional_create();
        struct alloc_cache alloc;
        ldns_buffer* buf = ldns_buffer_new(65535);
        struct entry* e;
@@ -317,7 +318,7 @@ dstest_file(const char* fname)
        }
 
        delete_entry(list);
-       region_destroy(region);
+       regional_destroy(region);
        alloc_clear(&alloc);
        ldns_buffer_free(buf);
 }
@@ -374,7 +375,7 @@ nsectest()
 /** Test hash algo - NSEC3 hash it and compare result */
 static void
 nsec3_hash_test_entry(struct entry* e, rbtree_t* ct,
-       struct alloc_cache* alloc, struct region* region, 
+       struct alloc_cache* alloc, struct regional* region, 
        ldns_buffer* buf)
 {
        struct query_info qinfo;
@@ -392,7 +393,7 @@ nsec3_hash_test_entry(struct entry* e, rbtree_t* ct,
        entry_to_repinfo(e, alloc, region, buf, &qinfo, &rep);
        nsec3 = find_rrset_type(rep, LDNS_RR_TYPE_NSEC3);
        answer = find_rrset_type(rep, LDNS_RR_TYPE_AAAA);
-       qname = region_alloc_init(region, qinfo.qname, qinfo.qname_len);
+       qname = regional_alloc_init(region, qinfo.qname, qinfo.qname_len);
        /* check test is OK */
        unit_assert(nsec3 && answer && qname);
 
@@ -429,7 +430,7 @@ nsec3_hash_test(const char* fname)
         * The test does not perform canonicalization during the compare.
         */
        rbtree_t ct;
-       struct region* region = region_create(malloc, free);
+       struct regional* region = regional_create();
        struct alloc_cache alloc;
        ldns_buffer* buf = ldns_buffer_new(65535);
        struct entry* e;
@@ -447,7 +448,7 @@ nsec3_hash_test(const char* fname)
        }
 
        delete_entry(list);
-       region_destroy(region);
+       regional_destroy(region);
        alloc_clear(&alloc);
        ldns_buffer_free(buf);
 }
index 2583d2e43cfa39a161e0d61eb2818d7aab5122e4..a6ac2caee298510f9d5cde3a5cdbe46ca2640595 100644 (file)
@@ -393,23 +393,4 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
        return unbound_stat_realloc(ptr, size);
 }
 
-/** special routine for region-allocator, print to log */
-void *unbound_stat_malloc_region(size_t size)
-{
-       log_info("region malloc(%u)", (unsigned)size);
-       return unbound_stat_malloc(size);
-}
-
-/** special routine for region-allocator, print to log */
-void unbound_stat_free_region(void *ptr)
-{
-       if(ptr && memcmp(ptr-8, &mem_special, sizeof(mem_special)) == 0) {
-               size_t s;
-               memcpy(&s, ptr-16, sizeof(s));
-               log_info("region free(%p) size %u", ptr, (unsigned)s);
-       } else
-               log_info("region unmatched free(%p)", ptr);
-       unbound_stat_free(ptr);
-}
-
 #endif /* UNBOUND_ALLOC_STATS */
index fdba17304365e8bd1bc8e5d955a5bad196547418..e387ecc274196b8ea7d86c1718c054c1202a6afc 100644 (file)
@@ -45,7 +45,7 @@
 #include "util/data/msgparse.h"
 #include "util/data/dname.h"
 #include "util/log.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/net_help.h"
 
 /** return code that means the function ran out of memory. negative so it does
@@ -162,12 +162,12 @@ compress_tree_lookup(struct compress_tree_node* tree, uint8_t* dname,
  */
 static struct compress_tree_node*
 compress_tree_insert(struct compress_tree_node** tree, uint8_t* dname,
-       int labs, size_t offset, region_type* region)
+       int labs, size_t offset, struct regional* region)
 {
        int c, m;
        struct compress_tree_node* p, **prev;
        struct compress_tree_node* n = (struct compress_tree_node*)
-               region_alloc(region, sizeof(struct compress_tree_node));
+               regional_alloc(region, sizeof(struct compress_tree_node));
        if(!n) return 0;
        n->left = 0;
        n->right = 0;
@@ -209,7 +209,7 @@ compress_tree_insert(struct compress_tree_node** tree, uint8_t* dname,
  */
 static int
 compress_tree_store(struct compress_tree_node** tree, uint8_t* dname,
-       int labs, size_t offset, region_type* region,
+       int labs, size_t offset, struct regional* region,
        struct compress_tree_node* closest)
 {
        uint8_t lablen;
@@ -284,7 +284,7 @@ write_compressed_dname(ldns_buffer* pkt, uint8_t* dname, int labs,
 /** compress owner name of RR, return RETVAL_OUTMEM RETVAL_TRUNC */
 static int
 compress_owner(struct ub_packed_rrset_key* key, ldns_buffer* pkt, 
-       region_type* region, struct compress_tree_node** tree, 
+       struct regional* region, struct compress_tree_node** tree, 
        size_t owner_pos, uint16_t* owner_ptr, int owner_labs)
 {
        struct compress_tree_node* p;
@@ -332,7 +332,7 @@ compress_owner(struct ub_packed_rrset_key* key, ldns_buffer* pkt,
 /** compress any domain name to the packet, return RETVAL_* */
 static int
 compress_any_dname(uint8_t* dname, ldns_buffer* pkt, int labs, 
-       region_type* region, struct compress_tree_node** tree)
+       struct regional* region, struct compress_tree_node** tree)
 {
        struct compress_tree_node* p;
        size_t pos = ldns_buffer_position(pkt);
@@ -362,7 +362,7 @@ type_rdata_compressable(struct ub_packed_rrset_key* key)
 /** compress domain names in rdata, return RETVAL_* */
 static int
 compress_rdata(ldns_buffer* pkt, uint8_t* rdata, size_t todolen, 
-       region_type* region, struct compress_tree_node** tree, 
+       struct regional* region, struct compress_tree_node** tree, 
        const ldns_rr_descriptor* desc)
 {
        int labs, r, rdf = 0;
@@ -444,7 +444,7 @@ rrset_belongs_in_reply(ldns_pkt_section s, uint16_t rrtype, uint16_t qtype,
 /** store rrset in buffer in wireformat, return RETVAL_* */
 static int
 packed_rrset_encode(struct ub_packed_rrset_key* key, ldns_buffer* pkt, 
-       uint16_t* num_rrs, uint32_t timenow, region_type* region,
+       uint16_t* num_rrs, uint32_t timenow, struct regional* region,
        int do_data, int do_sig, struct compress_tree_node** tree,
        ldns_pkt_section s, uint16_t qtype, int dnssec)
 {
@@ -524,7 +524,7 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, ldns_buffer* pkt,
 static int
 insert_section(struct reply_info* rep, size_t num_rrsets, uint16_t* num_rrs,
        ldns_buffer* pkt, size_t rrsets_before, uint32_t timenow, 
-       region_type* region, struct compress_tree_node** tree,
+       struct regional* region, struct compress_tree_node** tree,
        ldns_pkt_section s, uint16_t qtype, int dnssec)
 {
        int r;
@@ -574,7 +574,7 @@ insert_section(struct reply_info* rep, size_t num_rrsets, uint16_t* num_rrs,
 /** store query section in wireformat buffer, return RETVAL */
 static int
 insert_query(struct query_info* qinfo, struct compress_tree_node** tree, 
-       ldns_buffer* buffer, struct region* region)
+       ldns_buffer* buffer, struct regional* region)
 {
        if(ldns_buffer_remaining(buffer) < 
                qinfo->qname_len+sizeof(uint16_t)*2)
@@ -592,7 +592,7 @@ insert_query(struct query_info* qinfo, struct compress_tree_node** tree,
 int 
 reply_info_encode(struct query_info* qinfo, struct reply_info* rep, 
        uint16_t id, uint16_t flags, ldns_buffer* buffer, uint32_t timenow, 
-       region_type* region, uint16_t udpsize, int dnssec)
+       struct regional* region, uint16_t udpsize, int dnssec)
 {
        uint16_t ancount=0, nscount=0, arcount=0;
        struct compress_tree_node* tree = 0;
@@ -708,7 +708,7 @@ attach_edns_record(ldns_buffer* pkt, struct edns_data* edns)
 int 
 reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep, 
        uint16_t id, uint16_t qflags, ldns_buffer* pkt, uint32_t timenow,
-       int cached, struct region* region, uint16_t udpsize, 
+       int cached, struct regional* region, uint16_t udpsize, 
        struct edns_data* edns, int dnssec, int secure)
 {
        uint16_t flags;
index 3040c235c3fca152e80b16d5f1ec3d5c62c81bb7..74d6c1fb2dd6346d6e6e9205a425fce8fad56ca0 100644 (file)
@@ -44,7 +44,7 @@
 #define UTIL_DATA_MSGENCODE_H
 struct query_info;
 struct reply_info;
-struct region;
+struct regional;
 struct edns_data;
 
 /** 
@@ -67,7 +67,7 @@ struct edns_data;
  */
 int reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep, 
        uint16_t id, uint16_t qflags, ldns_buffer* dest, uint32_t timenow,
-       int cached, struct region* region, uint16_t udpsize, 
+       int cached, struct regional* region, uint16_t udpsize, 
        struct edns_data* edns, int dnssec, int secure);
 
 /**
@@ -89,7 +89,7 @@ int reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep,
  */
 int reply_info_encode(struct query_info* qinfo, struct reply_info* rep, 
        uint16_t id, uint16_t flags, ldns_buffer* buffer, uint32_t timenow, 
-       struct region* region, uint16_t udpsize, int dnssec);
+       struct regional* region, uint16_t udpsize, int dnssec);
 
 /**
  * Encode query packet. Assumes the buffer is large enough.
index f13c9c6d077f360841624b098ddea430491014ad..cd3323166c726d5184618fcd96e5173e26a28828 100644 (file)
@@ -42,7 +42,7 @@
 #include "util/data/dname.h"
 #include "util/data/packed_rrset.h"
 #include "util/storage/lookup3.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 
 /** smart comparison of (compressed, valid) dnames from packet */
 static int
@@ -68,9 +68,10 @@ smart_compare(ldns_buffer* pkt, uint8_t* dnow,
 static struct rrset_parse* 
 new_rrset(struct msg_parse* msg, uint8_t* dname, size_t dnamelen, 
        uint16_t type, uint16_t dclass, hashvalue_t hash, 
-       uint32_t rrset_flags, ldns_pkt_section section, region_type* region)
+       uint32_t rrset_flags, ldns_pkt_section section, 
+       struct regional* region)
 {
-       struct rrset_parse* p = region_alloc(region, sizeof(*p));
+       struct rrset_parse* p = regional_alloc(region, sizeof(*p));
        if(!p) return NULL;
        p->rrset_bucket_next = msg->hashtable[hash & (PARSE_TABLE_SIZE-1)];
        msg->hashtable[hash & (PARSE_TABLE_SIZE-1)] = p;
@@ -301,7 +302,7 @@ rrset_has_sigover(ldns_buffer* pkt, struct rrset_parse* rrset, uint16_t type,
 
 /** move rrsigs from sigset to dataset */
 static int
-moveover_rrsigs(ldns_buffer* pkt, region_type* region, 
+moveover_rrsigs(ldns_buffer* pkt, struct regional* region, 
        struct rrset_parse* sigset, struct rrset_parse* dataset, int duplicate)
 {
        struct rr_parse* sig = sigset->rr_first;
@@ -312,8 +313,8 @@ moveover_rrsigs(ldns_buffer* pkt, region_type* region,
                        dataset->type)) {
                        if(duplicate) {
                                /* new */
-                               insert = (struct rr_parse*)region_alloc(region,
-                                       sizeof(struct rr_parse));
+                               insert = (struct rr_parse*)regional_alloc(
+                                       region, sizeof(struct rr_parse));
                                insert->outside_packet = 0;
                                insert->ttl_data = sig->ttl_data;
                                insert->size = sig->size;
@@ -346,7 +347,7 @@ moveover_rrsigs(ldns_buffer* pkt, region_type* region,
 static struct rrset_parse*
 change_rrsig_rrset(struct rrset_parse* sigset, struct msg_parse* msg, 
        ldns_buffer* pkt, uint16_t datatype, uint32_t rrset_flags,
-       int hasother, ldns_pkt_section section, region_type* region)
+       int hasother, ldns_pkt_section section, struct regional* region)
 {
        struct rrset_parse* dataset = sigset;
        hashvalue_t hash = pkt_hash_rrset(pkt, sigset->dname, datatype, 
@@ -420,7 +421,7 @@ find_rrset(struct msg_parse* msg, ldns_buffer* pkt, uint8_t* dname,
        uint8_t** prev_dname_first, uint8_t** prev_dname_last,
        size_t* prev_dnamelen, uint16_t* prev_type,
        uint16_t* prev_dclass, struct rrset_parse** rrset_prev,
-       ldns_pkt_section section, region_type* region)
+       ldns_pkt_section section, struct regional* region)
 {
        uint16_t covtype;
        if(rrset_prev) {
@@ -686,7 +687,7 @@ sig_is_double(ldns_buffer* pkt, struct rrset_parse* rrset, uint8_t* ttldata)
 /** Add rr (from packet here) to rrset, skips rr */
 static int
 add_rr_to_rrset(struct rrset_parse* rrset, ldns_buffer* pkt, 
-       struct msg_parse* msg, region_type* region, 
+       struct msg_parse* msg, struct regional* region, 
        ldns_pkt_section section, uint16_t type)
 {
        struct rr_parse* rr;
@@ -718,7 +719,7 @@ add_rr_to_rrset(struct rrset_parse* rrset, ldns_buffer* pkt,
        }
        
        /* create rr */
-       if(!(rr = (struct rr_parse*)region_alloc(region, sizeof(*rr))))
+       if(!(rr = (struct rr_parse*)regional_alloc(region, sizeof(*rr))))
                return LDNS_RCODE_SERVFAIL;
        rr->outside_packet = 0;
        rr->ttl_data = ldns_buffer_current(pkt);
@@ -757,8 +758,9 @@ add_rr_to_rrset(struct rrset_parse* rrset, ldns_buffer* pkt,
  * @return: 0 if OK, or rcode on error.
  */
 static int
-parse_section(ldns_buffer* pkt, struct msg_parse* msg, region_type* region,
-       ldns_pkt_section section, uint16_t num_rrs, size_t* num_rrsets)
+parse_section(ldns_buffer* pkt, struct msg_parse* msg, 
+       struct regional* region, ldns_pkt_section section, 
+       uint16_t num_rrs, size_t* num_rrsets)
 {
        uint16_t i;
        uint8_t* dname, *prev_dname_f = NULL, *prev_dname_l = NULL;
@@ -829,7 +831,7 @@ parse_section(ldns_buffer* pkt, struct msg_parse* msg, region_type* region,
 }
 
 int
-parse_packet(ldns_buffer* pkt, struct msg_parse* msg, region_type* region)
+parse_packet(ldns_buffer* pkt, struct msg_parse* msg, struct regional* region)
 {
        int ret;
        if(ldns_buffer_remaining(pkt) < LDNS_HEADER_SIZE)
index 7e9af9fc9fea1f60fd3487e25492569d09f86ac3..438687c0671cffdee04c086780860bb599ca4475 100644 (file)
@@ -65,7 +65,7 @@
 #include "util/storage/lruhash.h"
 struct rrset_parse;
 struct rr_parse;
-struct region;
+struct regional;
 
 /** number of buckets in parse rrset hash table. Must be power of 2. */
 #define PARSE_TABLE_SIZE 1024
@@ -227,7 +227,7 @@ size_t get_rdf_size(ldns_rdf_type rdf);
  * @return: 0 if OK, or rcode on error.
  */
 int parse_packet(ldns_buffer* pkt, struct msg_parse* msg, 
-       struct region* region);
+       struct regional* region);
 
 /**
  * After parsing the packet, extract EDNS data from packet.
index 77dae93465ecf625bca4e541cb430756bbcf3b33..64bb12a77a7d55ecf1526bcc08847b1068444d7f 100644 (file)
 #include "util/netevent.h"
 #include "util/net_help.h"
 #include "util/data/dname.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/data/msgparse.h"
 #include "util/data/msgencode.h"
 
 /** allocate qinfo, return 0 on error */
 static int
 parse_create_qinfo(ldns_buffer* pkt, struct msg_parse* msg, 
-       struct query_info* qinf, struct region* region)
+       struct query_info* qinf, struct regional* region)
 {
        if(msg->qname) {
                if(region)
-                       qinf->qname = (uint8_t*)region_alloc(region, 
+                       qinf->qname = (uint8_t*)regional_alloc(region, 
                                msg->qname_len);
                else    qinf->qname = (uint8_t*)malloc(msg->qname_len);
                if(!qinf->qname) return 0;
@@ -72,7 +72,7 @@ parse_create_qinfo(ldns_buffer* pkt, struct msg_parse* msg,
 
 /** constructor for replyinfo */
 static struct reply_info*
-construct_reply_info_base(struct region* region, uint16_t flags, size_t qd,
+construct_reply_info_base(struct regional* region, uint16_t flags, size_t qd,
        uint32_t ttl, size_t an, size_t ns, size_t ar, size_t total,
        enum sec_status sec)
 {
@@ -81,7 +81,7 @@ construct_reply_info_base(struct region* region, uint16_t flags, size_t qd,
        size_t s = sizeof(struct reply_info) - sizeof(struct rrset_ref) +
                sizeof(struct ub_packed_rrset_key*) * total;
        if(region)
-               rep = (struct reply_info*)region_alloc(region, s);
+               rep = (struct reply_info*)regional_alloc(region, s);
        else    rep = (struct reply_info*)malloc(s + 
                        sizeof(struct rrset_ref) * (total));
        if(!rep) 
@@ -108,7 +108,7 @@ construct_reply_info_base(struct region* region, uint16_t flags, size_t qd,
 /** allocate replyinfo, return 0 on error */
 static int
 parse_create_repinfo(struct msg_parse* msg, struct reply_info** rep,
-       struct region* region)
+       struct regional* region)
 {
        *rep = construct_reply_info_base(region, msg->flags, msg->qdcount, 0,
                msg->an_rrsets, msg->ns_rrsets, msg->ar_rrsets, 
@@ -121,13 +121,13 @@ parse_create_repinfo(struct msg_parse* msg, struct reply_info** rep,
 /** allocate (special) rrset keys, return 0 on error */
 static int
 repinfo_alloc_rrset_keys(struct reply_info* rep, struct alloc_cache* alloc, 
-       struct region* region)
+       struct regional* region)
 {
        size_t i;
        for(i=0; i<rep->rrset_count; i++) {
                if(region) {
                        rep->rrsets[i] = (struct ub_packed_rrset_key*)
-                               region_alloc(region, 
+                               regional_alloc(region, 
                                sizeof(struct ub_packed_rrset_key));
                        if(rep->rrsets[i]) {
                                memset(rep->rrsets[i], 0, 
@@ -264,7 +264,7 @@ parse_rr_copy(ldns_buffer* pkt, struct rrset_parse* pset,
 /** create rrset return 0 on failure */
 static int
 parse_create_rrset(ldns_buffer* pkt, struct rrset_parse* pset,
-       struct packed_rrset_data** data, struct region* region)
+       struct packed_rrset_data** data, struct regional* region)
 {
        /* allocate */
        size_t s = sizeof(struct packed_rrset_data) + 
@@ -272,7 +272,7 @@ parse_create_rrset(ldns_buffer* pkt, struct rrset_parse* pset,
                (sizeof(size_t)+sizeof(uint8_t*)+sizeof(uint32_t)) + 
                pset->size;
        if(region)
-               *data = region_alloc(region, s);
+               *data = regional_alloc(region, s);
        else    *data = malloc(s);
        if(!*data)
                return 0;
@@ -303,14 +303,14 @@ get_rrset_trust(struct msg_parse* msg, struct rrset_parse* rrset)
 
 int
 parse_copy_decompress_rrset(ldns_buffer* pkt, struct msg_parse* msg,
-       struct rrset_parse *pset, struct region* region, 
+       struct rrset_parse *pset, struct regional* region, 
        struct ub_packed_rrset_key* pk)
 {
        struct packed_rrset_data* data;
        pk->rk.flags = pset->flags;
        pk->rk.dname_len = pset->dname_len;
        if(region)
-               pk->rk.dname = (uint8_t*)region_alloc(
+               pk->rk.dname = (uint8_t*)regional_alloc(
                        region, pset->dname_len);
        else    pk->rk.dname = 
                        (uint8_t*)malloc(pset->dname_len);
@@ -341,7 +341,7 @@ parse_copy_decompress_rrset(ldns_buffer* pkt, struct msg_parse* msg,
  */
 static int
 parse_copy_decompress(ldns_buffer* pkt, struct msg_parse* msg,
-       struct reply_info* rep, struct region* region)
+       struct reply_info* rep, struct regional* region)
 {
        size_t i;
        struct rrset_parse *pset = msg->rrset_first;
@@ -368,7 +368,7 @@ parse_copy_decompress(ldns_buffer* pkt, struct msg_parse* msg,
 int 
 parse_create_msg(ldns_buffer* pkt, struct msg_parse* msg,
        struct alloc_cache* alloc, struct query_info* qinf, 
-       struct reply_info** rep, struct region* region)
+       struct reply_info** rep, struct regional* region)
 {
        log_assert(pkt && msg);
        if(!parse_create_qinfo(pkt, msg, qinf, region))
@@ -383,8 +383,8 @@ parse_create_msg(ldns_buffer* pkt, struct msg_parse* msg,
 }
 
 int reply_info_parse(ldns_buffer* pkt, struct alloc_cache* alloc,
-        struct query_info* qinf, struct reply_info** rep, struct region* region,
-       struct edns_data* edns)
+        struct query_info* qinf, struct reply_info** rep, 
+       struct regional* region, struct edns_data* edns)
 {
        /* use scratch pad region-allocator during parsing. */
        struct msg_parse* msg;
@@ -392,7 +392,7 @@ int reply_info_parse(ldns_buffer* pkt, struct alloc_cache* alloc,
        
        qinf->qname = NULL;
        *rep = NULL;
-       if(!(msg = region_alloc(region, sizeof(*msg)))) {
+       if(!(msg = regional_alloc(region, sizeof(*msg)))) {
                return LDNS_RCODE_SERVFAIL;
        }
        memset(msg, 0, sizeof(*msg));
@@ -588,7 +588,7 @@ query_info_entrysetup(struct query_info* q, struct reply_info* r,
 /** copy rrsets from replyinfo to dest replyinfo */
 static int
 repinfo_copy_rrsets(struct reply_info* dest, struct reply_info* from, 
-       struct region* region)
+       struct regional* region)
 {
        size_t i, s;
        struct packed_rrset_data* fd, *dd;
@@ -601,7 +601,7 @@ repinfo_copy_rrsets(struct reply_info* dest, struct reply_info* from,
                dk->rk = fk->rk;
                if(region) {
                        dk->id = fk->id;
-                       dk->rk.dname = (uint8_t*)region_alloc_init(region,
+                       dk->rk.dname = (uint8_t*)regional_alloc_init(region,
                                fk->rk.dname, fk->rk.dname_len);
                } else  
                        dk->rk.dname = (uint8_t*)memdup(fk->rk.dname, 
@@ -610,7 +610,7 @@ repinfo_copy_rrsets(struct reply_info* dest, struct reply_info* from,
                        return 0;
                s = packed_rrset_sizeof(fd);
                if(region)
-                       dd = (struct packed_rrset_data*)region_alloc_init(
+                       dd = (struct packed_rrset_data*)regional_alloc_init(
                                region, fd, s);
                else    dd = (struct packed_rrset_data*)memdup(fd, s);
                if(!dd) 
@@ -623,7 +623,7 @@ repinfo_copy_rrsets(struct reply_info* dest, struct reply_info* from,
 
 struct reply_info* 
 reply_info_copy(struct reply_info* rep, struct alloc_cache* alloc, 
-       struct region* region)
+       struct regional* region)
 {
        struct reply_info* cp;
        cp = construct_reply_info_base(region, rep->flags, rep->qdcount, 
@@ -708,7 +708,7 @@ log_dns_msg(const char* str, struct query_info* qinfo, struct reply_info* rep)
 {
        /* not particularly fast but flexible, make wireformat and print */
        ldns_buffer* buf = ldns_buffer_new(65535);
-       struct region* region = region_create(malloc, free);
+       struct regional* region = regional_create();
        if(!reply_info_encode(qinfo, rep, 0, rep->flags, buf, 0, 
                region, 65535, 1)) {
                log_info("%s: log_dns_msg: out of memory", str);
@@ -733,7 +733,7 @@ log_dns_msg(const char* str, struct query_info* qinfo, struct reply_info* rep)
                ldns_pkt_free(pkt);
        }
        ldns_buffer_free(buf);
-       region_destroy(region);
+       regional_destroy(region);
 }
 
 void 
index b4e12591b3fb2ed6bac42f83aee274428e1274ab..bf0ce473e3b173ffb25c3ecea163bfad646945b6 100644 (file)
@@ -46,7 +46,7 @@
 struct comm_reply;
 struct alloc_cache;
 struct iovec;
-struct region;
+struct regional;
 struct edns_data;
 struct msg_parse;
 struct rrset_parse;
@@ -202,7 +202,7 @@ int query_info_parse(struct query_info* m, ldns_buffer* query);
  */
 int reply_info_parse(ldns_buffer* pkt, struct alloc_cache* alloc,
        struct query_info* qinf, struct reply_info** rep, 
-       struct region* region, struct edns_data* edns);
+       struct regional* region, struct edns_data* edns);
 
 /**
  * Allocate and decompress parsed message and rrsets.
@@ -221,7 +221,7 @@ int reply_info_parse(ldns_buffer* pkt, struct alloc_cache* alloc,
  */
 int parse_create_msg(ldns_buffer* pkt, struct msg_parse* msg,
         struct alloc_cache* alloc, struct query_info* qinf,
-       struct reply_info** rep, struct region* region);
+       struct reply_info** rep, struct regional* region);
 
 /**
  * Sorts the ref array.
@@ -298,7 +298,7 @@ struct msgreply_entry* query_info_entrysetup(struct query_info* q,
  * @return new reply info or NULL on memory error.
  */
 struct reply_info* reply_info_copy(struct reply_info* rep, 
-       struct alloc_cache* alloc, struct region* region);
+       struct alloc_cache* alloc, struct regional* region);
 
 /**
  * Copy a parsed rrset into given key, decompressing and allocating rdata.
@@ -312,7 +312,7 @@ struct reply_info* reply_info_copy(struct reply_info* rep,
  * @return false on alloc failure.
  */
 int parse_copy_decompress_rrset(ldns_buffer* pkt, struct msg_parse* msg,
-       struct rrset_parse *pset, struct region* region, 
+       struct rrset_parse *pset, struct regional* region, 
        struct ub_packed_rrset_key* pk);
 
 /**
index b71dd8d3f7c791f8aafc761d5af18d0d3e466891..d90be69dfd21e8df072ae99dd71fecec5d69db8b 100644 (file)
@@ -125,23 +125,6 @@ fptr_whitelist_serviced_query(comm_point_callback_t *fptr)
        return 0;
 }
 
-int 
-fptr_whitelist_region_allocator(void *(*fptr)(size_t))
-{
-       /* TODO: remove callbacks from new region type */
-       return 1; /* DEBUG for different mem allocs */
-       if(fptr == &malloc) return 1;
-       return 0;
-}
-
-int 
-fptr_whitelist_region_deallocator(void (*fptr)(void*))
-{
-       return 1; /* DEBUG for different mem allocs */
-       if(fptr == &free) return 1;
-       return 0;
-}
-
 int 
 fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *))
 {
index 615db488404ab1dc7e837fb9c3d994c645abea59..89e3672b0c9d1ea4758eeb7b54eeccaaab14ac69 100644 (file)
@@ -115,22 +115,6 @@ int fptr_whitelist_pending_tcp(comm_point_callback_t *fptr);
  */
 int fptr_whitelist_serviced_query(comm_point_callback_t *fptr);
 
-/**
- * Check function pointer whitelist for region allocator callback values.
- *
- * @param fptr: function pointer to check.
- * @return false if not in whitelist.
- */
-int fptr_whitelist_region_allocator(void *(*fptr)(size_t));
-
-/**
- * Check function pointer whitelist for region deallocator callback values.
- *
- * @param fptr: function pointer to check.
- * @return false if not in whitelist.
- */
-int fptr_whitelist_region_deallocator(void (*fptr)(void*));
-
 /**
  * Check function pointer whitelist for rbtree cmp callback values.
  *
index 83b1431bf8ec0d4306c07b2d6d61310b920f301c..47b8ec10cd3a0756b7785107649dc8f20807c1a9 100644 (file)
@@ -50,7 +50,7 @@ struct config_file;
 struct slabhash;
 struct query_info;
 struct edns_data;
-struct region;
+struct regional;
 struct worker;
 struct module_qstate;
 struct ub_randstate;
@@ -180,7 +180,7 @@ struct module_env {
                struct query_info* qinfo, uint16_t flags, int prime);
 
        /** region for temporary usage. May be cleared after operate() call. */
-       struct region* scratch;
+       struct regional* scratch;
        /** buffer for temporary usage. May be cleared after operate() call. */
        ldns_buffer* scratch_buffer;
        /** internal data for daemon - worker thread. */
@@ -254,7 +254,7 @@ struct module_qstate {
        /** the rcode, in case of error, instead of a reply message */
        int return_rcode;
        /** region for this query. Cleared when query process finishes. */
-       struct region* region;
+       struct regional* region;
 
        /** which module is executing */
        int curmod;
diff --git a/util/region-allocator.c b/util/region-allocator.c
deleted file mode 100644 (file)
index 23dac4d..0000000
+++ /dev/null
@@ -1,554 +0,0 @@
-/*
- * region-allocator.c -- region based memory allocator.
- *
- * Copyright (c) 2001-2006, NLnet Labs. All rights reserved.
- *
- * Copyright (c) 2007, NLnet Labs. All rights reserved.
- * 
- * This software is open source.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 
- * Neither the name of the NLNET LABS nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/**
- * \file
- * Region allocator. Allocates small portions of of larger chunks.
- */
-
-#include "config.h"
-#include "util/log.h"
-#include "util/region-allocator.h"
-#include "util/fptr_wlist.h"
-
-#ifdef ALIGNMENT
-#  undef ALIGNMENT
-#endif
-/** increase size until it fits alignment of s bytes */
-#define ALIGN_UP(x, s)     (((x) + s - 1) & (~(s - 1)))
-/** what size to align on */
-#define ALIGNMENT          (sizeof(uint64_t))
-/** set to 1 to perform expensive check for double recycle() */
-#define CHECK_DOUBLE_FREE 0 
-
-/** typedef for cleanup structure */
-typedef struct cleanup cleanup_type;
-/** store chunks and user cleanup actions */
-struct cleanup
-{
-       /** action to call (such as free) */
-       void (*action)(void *);
-       /** pointer to pass to action. */
-       void *data;
-};
-
-/** linked list of recycle elements of a certain size. */
-struct recycle_elem {
-       /** next in recycle list. First bytes of block is used for this ptr */
-       struct recycle_elem* next;
-};
-
-/** hidden type of the region. */
-struct region
-{
-       /** total bytes allocated */
-       size_t        total_allocated;
-       /** number of small objects allocated */
-       size_t        small_objects;
-       /** number of large objects allocated */
-       size_t        large_objects;
-       /** number of chunks allocated */
-       size_t        chunk_count;
-       /** Unused space due to alignment, etc. */
-       size_t        unused_space; 
-       
-       /** number of bytes allocated in the current chunk. */
-       size_t        allocated;
-       /** initial chunk */
-       char         *initial_data;
-       /** current chunk */
-       char         *data;
-
-       /** how to allocate memory (for chunks) */
-       void         *(*allocator)(size_t);
-       /** how to deallocate memory (for chunks) */
-       void          (*deallocator)(void *);
-    
-       /** current max size of growing cleanup array */
-       size_t        maximum_cleanup_count;
-       /** number used inside the cleanup array */
-       size_t        cleanup_count;
-       /** cleanup array, chunks and user actions */
-       cleanup_type *cleanups;
-
-       /** size of chunks */
-       size_t        chunk_size;
-       /** large object size */
-       size_t        large_object_size;
-
-       /** if not NULL recycling is enabled.
-        * It is an array of linked lists of parts held for recycle.
-        * The parts are all pointers to within the allocated chunks.
-        * Array [i] points to elements of size i. */
-       struct recycle_elem** recycle_bin;
-       /** amount of memory in recycle storage */
-       size_t          recycle_size;
-};
-
-
-/** common code to initialize a region */
-static region_type *
-alloc_region_base(void *(*allocator)(size_t size),
-                 void (*deallocator)(void *),
-                 size_t initial_cleanup_count)
-{
-       region_type *result = (region_type *) allocator(sizeof(region_type));
-       if (!result) return NULL;
-
-       result->total_allocated = 0;
-       result->small_objects = 0;
-       result->large_objects = 0;
-       result->chunk_count = 1;
-       result->unused_space = 0;
-       result->recycle_bin = NULL;
-       result->recycle_size = 0;
-       
-       result->allocated = 0;
-       result->data = NULL;
-       result->initial_data = NULL;
-
-       result->allocator = allocator;
-       result->deallocator = deallocator;
-
-       log_assert(initial_cleanup_count > 0);
-       result->maximum_cleanup_count = initial_cleanup_count;
-       result->cleanup_count = 0;
-       log_assert(fptr_whitelist_region_allocator(allocator));
-       result->cleanups = (cleanup_type *) allocator(
-               result->maximum_cleanup_count * sizeof(cleanup_type));
-       if (!result->cleanups) {
-               log_assert(fptr_whitelist_region_deallocator(deallocator));
-               deallocator(result);
-               return NULL;
-       }
-
-       result->chunk_size = DEFAULT_CHUNK_SIZE;
-       result->large_object_size = DEFAULT_LARGE_OBJECT_SIZE;
-       return result;
-}
-
-region_type *
-region_create(void *(*allocator)(size_t), void (*deallocator)(void *))
-{
-       region_type* result;
-#ifdef UNBOUND_ALLOC_STATS
-       void *unbound_stat_malloc_region(size_t size);
-       void unbound_stat_free_region(void *ptr);
-       allocator = &unbound_stat_malloc_region;
-       deallocator = &unbound_stat_free_region;
-#endif
-       log_assert(fptr_whitelist_region_allocator(allocator));
-       result = alloc_region_base(allocator, deallocator, 
-               DEFAULT_INITIAL_CLEANUP_SIZE);
-       if(!result)
-               return NULL;
-       result->data = (char *) allocator(result->chunk_size);
-       if (!result->data) {
-               log_assert(fptr_whitelist_region_deallocator(deallocator));
-               deallocator(result->cleanups);
-               deallocator(result);
-               return NULL;
-       }
-       result->initial_data = result->data;
-    
-       return result;
-}
-
-
-region_type *region_create_custom(void *(*allocator)(size_t),
-                                 void (*deallocator)(void *),
-                                 size_t chunk_size,
-                                 size_t large_object_size,
-                                 size_t initial_cleanup_size,
-                                 int recycle)
-{
-       region_type* result;
-#ifdef UNBOUND_ALLOC_STATS
-       void *unbound_stat_malloc_region(size_t size);
-       void unbound_stat_free_region(void *ptr);
-       allocator = &unbound_stat_malloc_region;
-       deallocator = &unbound_stat_free_region;
-#endif
-       log_assert(fptr_whitelist_region_allocator(allocator));
-       result = alloc_region_base(allocator, deallocator, 
-               initial_cleanup_size);
-       if(!result)
-               return NULL;
-       log_assert(large_object_size <= chunk_size);
-       result->chunk_size = chunk_size;
-       result->large_object_size = large_object_size;
-       if(result->chunk_size > 0) {
-               result->data = (char *) allocator(result->chunk_size);
-               if (!result->data) {
-                       log_assert(fptr_whitelist_region_deallocator(
-                               deallocator));
-                       deallocator(result->cleanups);
-                       deallocator(result);
-                       return NULL;
-               }
-               result->initial_data = result->data;
-       }
-       if(recycle) {
-               result->recycle_bin = allocator(sizeof(struct recycle_elem*)
-                       * result->large_object_size);
-               if(!result->recycle_bin) {
-                       region_destroy(result);
-                       return NULL;
-               }
-               memset(result->recycle_bin, 0, sizeof(struct recycle_elem*)
-                       * result->large_object_size);
-       }
-       return result;
-}
-
-
-void
-region_destroy(region_type *region)
-{
-       void (*deallocator)(void *);
-       if (!region)
-               return;
-
-       deallocator = region->deallocator;
-       log_assert(fptr_whitelist_region_deallocator(deallocator));
-
-       region_free_all(region);
-       deallocator(region->cleanups);
-       deallocator(region->initial_data);
-       if(region->recycle_bin)
-               deallocator(region->recycle_bin);
-       deallocator(region);
-}
-
-
-size_t
-region_add_cleanup(region_type *region, void (*action)(void *), void *data)
-{
-       log_assert(action);
-    
-       log_assert(fptr_whitelist_region_allocator(region->allocator));
-       if (region->cleanup_count >= region->maximum_cleanup_count) {
-               cleanup_type *cleanups = (cleanup_type *) region->allocator(
-                       2 * region->maximum_cleanup_count * sizeof(cleanup_type));
-               if (!cleanups) return 0;
-
-               memcpy(cleanups, region->cleanups,
-                      region->cleanup_count * sizeof(cleanup_type));
-               log_assert(fptr_whitelist_region_deallocator(
-                       region->deallocator));
-               region->deallocator(region->cleanups);
-
-               region->cleanups = cleanups;
-               region->maximum_cleanup_count *= 2;
-       }
-
-       region->cleanups[region->cleanup_count].action = action;
-       region->cleanups[region->cleanup_count].data = data;
-
-       ++region->cleanup_count;
-       return region->cleanup_count;
-}
-
-void *
-region_alloc(region_type *region, size_t size)
-{
-       size_t aligned_size;
-       void *result;
-
-       if (size == 0) {
-               size = 1;
-       }
-       aligned_size = ALIGN_UP(size, ALIGNMENT);
-
-       if (aligned_size >= region->large_object_size) {
-               log_assert(fptr_whitelist_region_allocator(region->allocator));
-               result = region->allocator(size);
-               if (!result) return NULL;
-        
-               log_assert(fptr_whitelist_region_deallocator(
-                       region->deallocator));
-               if (!region_add_cleanup(region, region->deallocator, result)) {
-                       region->deallocator(result);
-                       return NULL;
-               }
-        
-               region->total_allocated += size;
-               ++region->large_objects;
-               
-               return result;
-       }
-
-       if (region->recycle_bin && region->recycle_bin[aligned_size]) {
-               result = (void*)region->recycle_bin[aligned_size];
-               region->recycle_bin[aligned_size] = region->recycle_bin[aligned_size]->next; 
-               region->recycle_size -= aligned_size;
-               region->unused_space += aligned_size - size;
-               return result;
-       }
-    
-       log_assert(fptr_whitelist_region_allocator(region->allocator));
-       if (region->allocated + aligned_size > region->chunk_size) {
-               void *chunk = region->allocator(region->chunk_size);
-               size_t wasted;
-               if (!chunk) return NULL;
-
-               wasted = (region->chunk_size - region->allocated) & (~(ALIGNMENT-1));
-               if(wasted >= ALIGNMENT) {
-                       /* put wasted part in recycle bin for later use */
-                       region->total_allocated += wasted;
-                       ++region->small_objects;
-                       region_recycle(region, region->data+region->allocated, wasted);
-                       region->allocated += wasted;
-               }
-               ++region->chunk_count;
-               region->unused_space += region->chunk_size - region->allocated;
-               
-               log_assert(fptr_whitelist_region_deallocator(
-                       region->deallocator));
-               if(!region_add_cleanup(region, region->deallocator, chunk)) {
-                       region->deallocator(chunk);
-                       region->chunk_count--;
-                       region->unused_space -= 
-                               region->chunk_size - region->allocated;
-                       return NULL;
-               }
-               region->allocated = 0;
-               region->data = (char *) chunk;
-       }
-
-       result = region->data + region->allocated;
-       region->allocated += aligned_size;
-
-       region->total_allocated += aligned_size;
-       region->unused_space += aligned_size - size;
-       ++region->small_objects;
-       
-       return result;
-}
-
-void *
-region_alloc_init(region_type *region, const void *init, size_t size)
-{
-       void *result = region_alloc(region, size);
-       if (!result) return NULL;
-       memcpy(result, init, size);
-       return result;
-}
-
-void *
-region_alloc_zero(region_type *region, size_t size)
-{
-       void *result = region_alloc(region, size);
-       if (!result) return NULL;
-       memset(result, 0, size);
-       return result;
-}
-
-void
-region_free_all(region_type *region)
-{
-       size_t i;
-       log_assert(region);
-       log_assert(region->cleanups);
-    
-       i = region->cleanup_count;
-       while (i > 0) {
-               --i;
-               log_assert(region->cleanups[i].action);
-               region->cleanups[i].action(region->cleanups[i].data);
-       }
-
-       if(region->recycle_bin) {
-               memset(region->recycle_bin, 0, sizeof(struct recycle_elem*)
-                       * region->large_object_size);
-               region->recycle_size = 0;
-       }
-
-       region->data = region->initial_data;
-       region->cleanup_count = 0;
-       region->allocated = 0;
-
-       region->total_allocated = 0;
-       region->small_objects = 0;
-       region->large_objects = 0;
-       region->chunk_count = 1;
-       region->unused_space = 0;
-}
-
-
-char *
-region_strdup(region_type *region, const char *string)
-{
-       return (char *) region_alloc_init(region, string, strlen(string) + 1);
-}
-
-void 
-region_recycle(region_type *region, void *block, size_t size)
-{
-       size_t aligned_size;
-       size_t i;
-
-       if(!block || !region->recycle_bin)
-               return;
-
-       if (size == 0) {
-               size = 1;
-       }
-       aligned_size = ALIGN_UP(size, ALIGNMENT);
-
-       if(aligned_size < region->large_object_size) {
-               struct recycle_elem* elem = (struct recycle_elem*)block;
-               /* we rely on the fact that ALIGNMENT is void* so the next will fit */
-               log_assert(aligned_size >= sizeof(struct recycle_elem));
-
-               if(CHECK_DOUBLE_FREE) {
-                       /* make sure the same ptr is not freed twice. */
-                       struct recycle_elem *p = region->recycle_bin[aligned_size];
-                       while(p) {
-                               log_assert(p != elem); 
-                               p = p->next;
-                       }
-               }
-
-               elem->next = region->recycle_bin[aligned_size];
-               region->recycle_bin[aligned_size] = elem;
-               region->recycle_size += aligned_size;
-               region->unused_space -= aligned_size - size;
-               return;
-       }
-
-       /* a large allocation */
-       region->total_allocated -= size;
-       --region->large_objects;
-       for(i=0; i<region->cleanup_count; i++) {
-               while(region->cleanups[i].data == block) {
-                       /* perform action (deallocator) on block */
-                       region->cleanups[i].action(block);
-                       region->cleanups[i].data = NULL;
-                       /* remove cleanup - move last entry here, check this one again */
-                       --region->cleanup_count;
-                       region->cleanups[i].action = 
-                               region->cleanups[region->cleanup_count].action;
-                       region->cleanups[i].data = 
-                               region->cleanups[region->cleanup_count].data;
-               }
-       }
-}
-
-void
-region_dump_stats(region_type *region, FILE *out)
-{
-       fprintf(out, "%lu objects (%lu small/%lu large), %lu bytes allocated (%lu wasted) in %lu chunks, %lu cleanups, %lu in recyclebin",
-               (unsigned long) (region->small_objects + region->large_objects),
-               (unsigned long) region->small_objects,
-               (unsigned long) region->large_objects,
-               (unsigned long) region->total_allocated,
-               (unsigned long) region->unused_space,
-               (unsigned long) region->chunk_count,
-               (unsigned long) region->cleanup_count,
-               (unsigned long) region->recycle_size);
-       if(1 && region->recycle_bin) {
-               /* print details of the recycle bin */
-               size_t i;
-               for(i=0; i<region->large_object_size; i++) {
-                       size_t count = 0;
-                       struct recycle_elem* el = region->recycle_bin[i];
-                       while(el) {
-                               count++;
-                               el = el->next;
-                       }
-                       if(i%ALIGNMENT == 0 && i!=0)
-                               fprintf(out, " %lu", (unsigned long)count);
-               }
-       }
-}
-
-size_t region_get_recycle_size(region_type* region)
-{
-       return region->recycle_size;
-}
-
-/* debug routine, includes here to keep base region-allocator independent */
-#undef ALIGN_UP
-#include "util/log.h"
-void
-region_log_stats(region_type *region)
-{
-       char buf[10240], *str=buf;
-       int len=0;
-       snprintf(str, sizeof(buf), "%lu objects (%lu small/%lu large), %lu bytes allocated (%lu wasted) in %lu chunks, %lu cleanups, %lu in recyclebin%n",
-               (unsigned long) (region->small_objects + region->large_objects),
-               (unsigned long) region->small_objects,
-               (unsigned long) region->large_objects,
-               (unsigned long) region->total_allocated,
-               (unsigned long) region->unused_space,
-               (unsigned long) region->chunk_count,
-               (unsigned long) region->cleanup_count,
-               (unsigned long) region->recycle_size,
-               &len);
-       str+=len;
-       if(1 && region->recycle_bin) {
-               /* print details of the recycle bin */
-               size_t i;
-               for(i=0; i<region->large_object_size; i++) {
-                       size_t count = 0;
-                       struct recycle_elem* el = region->recycle_bin[i];
-                       while(el) {
-                               count++;
-                               el = el->next;
-                       }
-                       if(i%ALIGNMENT == 0 && i!=0) {
-                               snprintf(str, sizeof(buf)-(str-buf), " %lu%n", 
-                                       (unsigned long)count, &len);
-                               str+=len;
-                       }
-               }
-       }
-       log_info("memory: %s", buf);
-}
-
-size_t 
-region_get_mem(region_type* region)
-{
-       size_t s = sizeof(*region);
-       s += region->total_allocated + region->chunk_size - region->allocated;
-       s += region->maximum_cleanup_count * sizeof(cleanup_type);
-       if(region->recycle_bin)
-               s += sizeof(struct recycle_elem*)*region->large_object_size;
-       log_assert(s >= region->chunk_size * region->chunk_count);
-       return s;
-}
diff --git a/util/region-allocator.h b/util/region-allocator.h
deleted file mode 100644 (file)
index c10897d..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * region-allocator.h -- region based memory allocator.
- *
- * Copyright (c) 2001-2006, NLnet Labs. All rights reserved.
- *
- * Copyright (c) 2007, NLnet Labs. All rights reserved.
- * 
- * This software is open source.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 
- * Neither the name of the NLNET LABS nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/**
- * \file
- * Region allocator. Allocates small portions of of larger chunks.
- */
-
-#ifndef _REGION_ALLOCATOR_H_
-#define _REGION_ALLOCATOR_H_
-
-#include <stdio.h>
-
-/** The region type */
-typedef struct region region_type;
-
-/** Default reasonable size for chunks */
-#define DEFAULT_CHUNK_SIZE         4096
-/** Default size for large objects - allocated outside of chunks. */
-#define DEFAULT_LARGE_OBJECT_SIZE  (DEFAULT_CHUNK_SIZE / 8)
-/** Default size for cleanup array initial size. */
-#define DEFAULT_INITIAL_CLEANUP_SIZE 16
-
-/**
- * Create a new region.
- * @param allocator: 'malloc' or another memory allocator.
- * @param deallocator: 'free' or another memory deallocator.
- */
-region_type *region_create(void *(*allocator)(size_t),
-                          void (*deallocator)(void *));
-
-
-/**
- * Create a new region, with chunk size and large object size.
- * @param allocator: 'malloc' or another memory allocator.
- * @param deallocator: 'free' or another memory deallocator.
- * @param chunk_size: size of chunks to allocate.
- * @param large_object_size:
- * Note that large_object_size must be <= chunk_size.
- * Anything larger than the large object size is individually alloced.
- * large_object_size = chunk_size/8 is reasonable;
- * @param initial_cleanup_size:
- * initial_cleanup_size is the number of prealloced ptrs for cleanups.
- * The cleanups are in a growing array, and it must start larger than zero.
- * @param recycle:
- * If recycle is true, environmentally friendly memory recycling is enabled.
- */
-region_type *region_create_custom(void *(*allocator)(size_t),
-                                 void (*deallocator)(void *),
-                                 size_t chunk_size,
-                                 size_t large_object_size,
-                                 size_t initial_cleanup_size,
-                                 int recycle);
-
-
-/**
- * Destroy REGION.  All memory associated with REGION is freed as if
- * region_free_all was called.
- * @param region: to delete.
- */
-void region_destroy(region_type *region);
-
-
-/**
- * Add a cleanup to REGION.  
- * @param region: the region.
- * @param action: ACTION will be called with DATA as
- * parameter when the region is freed or destroyed.
- * @param data: argument to action.
- * @return: 0 on failure.
- */
-size_t region_add_cleanup(region_type *region,
-                         void (*action)(void *),
-                         void *data);
-
-
-/**
- * Allocate SIZE bytes of memory inside REGION.  The memory is
- * deallocated when region_free_all is called for this region.
- * @param region: the region.
- * @param size: number of bytes.
- * @return: pointer to memory allocated.
- */
-void *region_alloc(region_type *region, size_t size);
-
-
-/**
- * Allocate SIZE bytes of memory inside REGION and copy INIT into it.
- * The memory is deallocated when region_free_all is called for this
- * region.
- * @param region: the region.
- * @param init: to copy.
- * @param size: number of bytes.
- * @return: pointer to memory allocated.
- */
-void *region_alloc_init(region_type *region, const void *init, size_t size);
-
-
-/**
- * Allocate SIZE bytes of memory inside REGION that are initialized to
- * 0.  The memory is deallocated when region_free_all is called for
- * this region.
- * @param region: the region.
- * @param size: number of bytes.
- * @return: pointer to memory allocated.
- */
-void *region_alloc_zero(region_type *region, size_t size);
-
-
-/**
- * Run the cleanup actions and free all memory associated with REGION.
- * @param region: the region.
- */
-void region_free_all(region_type *region);
-
-
-/**
- * Duplicate STRING and allocate the result in REGION.
- */
-char *region_strdup(region_type *region, const char *string);
-
-/**
- * Recycle an allocated memory block. Pass size used to alloc it.
- * Does nothing if recycling is not enabled for the region.
- * @param region: the region.
- * @param block: pointer to memory from region_alloc call.
- * @param size: number of bytes, same as passed to region_alloc call.
- */
-void region_recycle(region_type *region, void *block, size_t size);
-
-/**
- * Print some REGION statistics to OUT
- */
-void region_dump_stats(region_type *region, FILE *out);
-
-/** get size of recyclebin */
-size_t region_get_recycle_size(region_type* region);
-
-/** Debug print REGION statistics to LOG */
-void region_log_stats(region_type *region);
-
-/** get total memory size in use by region */
-size_t region_get_mem(region_type* region);
-
-#endif /* _REGION_ALLOCATOR_H_ */
index d22f149e14fe9152c0e3810f3b514e6a7adfcfe2..71d76c147e5cb1d56dae3d8c1989a9aa14cabaeb 100644 (file)
@@ -37,7 +37,7 @@
 
 /**
  * \file
- * Region allocator. Allocates small portions of of larger chunks.
+ * Regional allocator. Allocates small portions of of larger chunks.
  */
 
 #include "config.h"
 struct regional* 
 regional_create()
 {
-       void *block = malloc(REGIONAL_CHUNK_SIZE);
-       if(!block) return NULL;
-       return regional_create_custom(block, REGIONAL_CHUNK_SIZE);
+       return regional_create_custom(REGIONAL_CHUNK_SIZE);
 }
 
 /** init regional struct with first block */
 static void
 regional_init(struct regional* r)
 {
+       size_t a = ALIGN_UP(sizeof(struct regional), ALIGNMENT);
+       r->data = (char*)r + a;
+       r->available = r->first_size - a;
        r->next = NULL;
-       r->size = r->first_size;
-       r->allocated = ALIGN_UP(sizeof(struct regional), ALIGNMENT);
-       r->data = (char*)r;
-       r->total_large = 0;
        r->large_list = NULL;
+       r->total_large = 0;
 }
 
 struct regional* 
-regional_create_custom(void* block, size_t size)
+regional_create_custom(size_t size)
 {
-       struct regional* r = (struct regional*)block;
+       struct regional* r = (struct regional*)malloc(size);
        log_assert(sizeof(struct regional) <= size);
+       if(!r) return NULL;
        r->first_size = size;
        regional_init(r);
        return r;
@@ -108,6 +107,7 @@ regional_free_all(struct regional *r)
 void 
 regional_destroy(struct regional *r)
 {
+       if(!r) return;
        regional_free_all(r);
        free(r);
 }
@@ -127,17 +127,18 @@ regional_alloc(struct regional *r, size_t size)
                return s+ALIGNMENT;
        }
        /* create a new chunk */
-       if(r->allocated + a > r->size) {
+       if(a > r->available) {
                s = malloc(REGIONAL_CHUNK_SIZE);
                if(!s) return NULL;
-               *(char**)s = r->data;
-               r->data = s;
-               r->allocated = ALIGNMENT;
-               r->size = REGIONAL_CHUNK_SIZE;
+               *(char**)s = r->next;
+               r->next = (char*)s;
+               r->data = (char*)s + ALIGNMENT;
+               r->available = REGIONAL_CHUNK_SIZE - ALIGNMENT;
        }
        /* put in this chunk */
-       s = r->data + r->allocated;
-       r->allocated += a;
+       r->available -= a;
+       s = r->data;
+       r->data += a;
        return s;
 }
 
@@ -145,8 +146,7 @@ void *
 regional_alloc_init(struct regional* r, const void *init, size_t size)
 {
        void *s = regional_alloc(r, size);
-       if(!s)
-               return NULL;
+       if(!s) return NULL;
        memcpy(s, init, size);
        return s;
 }
@@ -155,8 +155,7 @@ void *
 regional_alloc_zero(struct regional *r, size_t size)
 {
        void *s = regional_alloc(r, size);
-       if(!s)
-               return NULL;
+       if(!s) return NULL;
        memset(s, 0, size);
        return s;
 }
@@ -164,7 +163,7 @@ regional_alloc_zero(struct regional *r, size_t size)
 char *
 regional_strdup(struct regional *r, const char *string)
 {
-       return regional_alloc_init(r, string, strlen(string)+1);
+       return (char*)regional_alloc_init(r, string, strlen(string)+1);
 }
 
 /**
@@ -201,6 +200,12 @@ count_large(struct regional* r)
 void 
 regional_log_stats(struct regional *r)
 {
+       /* some basic assertions put here (non time critical code) */
+       log_assert(ALIGNMENT >= sizeof(char*));
+       log_assert(REGIONAL_CHUNK_SIZE > ALIGNMENT);
+       log_assert(REGIONAL_CHUNK_SIZE-ALIGNMENT > REGIONAL_LARGE_OBJECT_SIZE);
+       log_assert(REGIONAL_CHUNK_SIZE >= sizeof(struct regional));
+       /* debug print */
        log_info("regional %u chunks, %u large",
                (unsigned)count_chunks(r), (unsigned)count_large(r));
 }
index 7c2975f7301d65bdd85d2f35e7e6f9a855605fbf..6090b8804a0b22375d4901fa7fec9ef1d68f8551 100644 (file)
 
 /**
  * \file
- * Region allocator. Allocates small portions of of larger chunks.
+ * Regional allocator. Allocates small portions of of larger chunks.
+ * Based on region-allocator from NSD, but rewritten to be light.
  *
  * Different from (nsd) region-allocator.h
  *     o does not have recycle bin
- *     o does not collect stats
+ *     o does not collect stats; just enough to answer get_mem() in use.
  *     o does not keep cleanup list
  *     o does not have function pointers to setup
  *     o allocs the regional struct inside the first block.
  *     o can take a block to create regional from.
+ *     o blocks and large allocations are kept on singly linked lists.
  */
 
 #ifndef UTIL_REGIONAL_H_
  */
 struct regional
 {
-       /** next chunk. NULL if first chunk is the only chunk. */
-       char* next;
-       /** number of bytes allocated in the current chunk. */
-       size_t allocated;
-       /** initial chunk size */
-       size_t first_size;
-       /** current chunk size */
-       size_t size;
-       /** total large size */
-       size_t total_large;
        /** 
-        * current chunk 
-        * can be cast to char** to obtain next chunk pointer.
+        * next chunk. NULL if first chunk is the only chunk. 
+        * first inside that chunk is the char* next pointer. 
+        * When regional_free_all() has been called this value is NULL.
         */
-       char *data;
+       char* next;
        /** first large object, cast to char** to obtain next ptr */
        char* large_list;
+       /** total large size */
+       size_t total_large;
+       /** initial chunk size */
+       size_t first_size;
+       /** number of bytes available in the current chunk. */
+       size_t available;
+       /** current chunk data position. */
+       char* data;
 };
 
 /**
  * Create a new regional.
+ * @return: newly allocated regional.
  */
 struct regional* regional_create();
 
 /**
  * Create a new region, with custom settings.
- * @param block: initial data block 
- *     The regional returned is allocated in the block (start of it).
- * @param size: length of block.
+ * @param size: length of first block.
+ * @return: newly allocated regional.
  */
-struct regional* regional_create_custom(void* block, size_t size);
+struct regional* regional_create_custom(size_t size);
        
 /**
- * Free all memory associated with REGION. Only keeps the first block with
+ * Free all memory associated with regional. Only keeps the first block with
  * the regional inside it.
  * @param r: the region.
  */
@@ -103,7 +104,7 @@ void regional_free_all(struct regional *r);
 void regional_destroy(struct regional *r);
 
 /**
- * Allocate SIZE bytes of memory inside REGION.  The memory is
+ * Allocate size bytes of memory inside regional.  The memory is
  * deallocated when region_free_all is called for this region.
  * @param r: the region.
  * @param size: number of bytes.
@@ -112,7 +113,7 @@ void regional_destroy(struct regional *r);
 void *regional_alloc(struct regional *r, size_t size);
 
 /**
- * Allocate SIZE bytes of memory inside REGION and copy INIT into it.
+ * Allocate size bytes of memory inside regional and copy INIT into it.
  * The memory is deallocated when region_free_all is called for this
  * region.
  * @param r: the region.
@@ -123,7 +124,7 @@ void *regional_alloc(struct regional *r, size_t size);
 void *regional_alloc_init(struct regional* r, const void *init, size_t size);
 
 /**
- * Allocate SIZE bytes of memory inside REGION that are initialized to
+ * Allocate size bytes of memory inside regional that are initialized to
  * 0.  The memory is deallocated when region_free_all is called for
  * this region.
  * @param r: the region.
@@ -133,13 +134,14 @@ void *regional_alloc_init(struct regional* r, const void *init, size_t size);
 void *regional_alloc_zero(struct regional *r, size_t size);
 
 /**
- * Duplicate STRING and allocate the result in REGION.
+ * Duplicate string and allocate the result in regional.
  * @param r: the region.
  * @param string: null terminated string.
+ * @return: pointer to memory allocated.
  */
 char *regional_strdup(struct regional *r, const char *string);
 
-/** Debug print REGION statistics to LOG */
+/** Debug print regional statistics to log */
 void regional_log_stats(struct regional *r);
 
 /** get total memory size in use by region */
index 1a84c63ed7e6bf986891b1d37b678528cc85be3b..150476b4b1811b0d3ff79af8b8bd86eef24385c8 100644 (file)
@@ -44,7 +44,7 @@
 #include "util/data/dname.h"
 #include "util/log.h"
 #include "util/net_help.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/config_file.h"
 
 int
@@ -69,7 +69,7 @@ anchors_create()
        struct val_anchors* a = (struct val_anchors*)calloc(1, sizeof(*a));
        if(!a)
                return NULL;
-       a->region = region_create(malloc, free);
+       a->region = regional_create();
        if(!a->region) {
                free(a);
                return NULL;
@@ -88,7 +88,7 @@ anchors_delete(struct val_anchors* anchors)
        if(!anchors)
                return;
        free(anchors->tree);
-       region_destroy(anchors->region);
+       regional_destroy(anchors->region);
        free(anchors);
 }
 
@@ -153,13 +153,13 @@ anchor_new_ta(struct val_anchors* anchors, uint8_t* name, int namelabs,
        size_t namelen, uint16_t dclass)
 {
        rbnode_t* r;
-       struct trust_anchor* ta = (struct trust_anchor*)region_alloc(
+       struct trust_anchor* ta = (struct trust_anchor*)regional_alloc(
                anchors->region, sizeof(struct trust_anchor));
        if(!ta)
                return NULL;
        memset(ta, 0, sizeof(*ta));
        ta->node.key = ta;
-       ta->name = region_alloc_init(anchors->region, name, namelen);
+       ta->name = regional_alloc_init(anchors->region, name, namelen);
        if(!ta->name)
                return NULL;
        ta->namelabs = namelabs;
@@ -189,12 +189,12 @@ static struct ta_key*
 anchor_new_ta_key(struct val_anchors* anchors, uint8_t* rdata, size_t rdata_len,
        uint16_t type)
 {
-       struct ta_key* k = (struct ta_key*)region_alloc(anchors->region,
+       struct ta_key* k = (struct ta_key*)regional_alloc(anchors->region,
                sizeof(*k));
        if(!k)
                return NULL;
        memset(k, 0, sizeof(*k));
-       k->data = region_alloc_init(anchors->region, rdata, rdata_len);
+       k->data = regional_alloc_init(anchors->region, rdata, rdata_len);
        if(!k->data)
                return NULL;
        k->len = rdata_len;
@@ -663,18 +663,18 @@ anchor_read_bind_file(struct val_anchors* anchors, ldns_buffer* buffer,
  * @return rrset or NULL on error.
  */
 static struct ub_packed_rrset_key*
-assemble_it(struct region* region, struct trust_anchor* ta, size_t num, 
+assemble_it(struct regional* region, struct trust_anchor* ta, size_t num, 
        uint16_t type)
 {
        struct ub_packed_rrset_key* pkey = (struct ub_packed_rrset_key*)
-               region_alloc(region, sizeof(*pkey));
+               regional_alloc(region, sizeof(*pkey));
        struct packed_rrset_data* pd;
        struct ta_key* tk;
        size_t i;
        if(!pkey)
                return NULL;
        memset(pkey, 0, sizeof(*pkey));
-       pkey->rk.dname = region_alloc_init(region, ta->name, ta->namelen);
+       pkey->rk.dname = regional_alloc_init(region, ta->name, ta->namelen);
        if(!pkey->rk.dname)
                return NULL;
        
@@ -683,19 +683,19 @@ assemble_it(struct region* region, struct trust_anchor* ta, size_t num,
        pkey->rk.rrset_class = htons(ta->dclass);
        /* The rrset is build in an uncompressed way. This means it
         * cannot be copied in the normal way. */
-       pd = (struct packed_rrset_data*)region_alloc(region, sizeof(*pd));
+       pd = (struct packed_rrset_data*)regional_alloc(region, sizeof(*pd));
        if(!pd)
                return NULL;
        memset(pd, 0, sizeof(*pd));
        pd->count = num;
        pd->trust = rrset_trust_ultimate;
-       pd->rr_len = (size_t*)region_alloc(region, num*sizeof(size_t));
+       pd->rr_len = (size_t*)regional_alloc(region, num*sizeof(size_t));
        if(!pd->rr_len)
                return NULL;
-       pd->rr_ttl = (uint32_t*)region_alloc(region, num*sizeof(uint32_t));
+       pd->rr_ttl = (uint32_t*)regional_alloc(region, num*sizeof(uint32_t));
        if(!pd->rr_ttl)
                return NULL;
-       pd->rr_data = (uint8_t**)region_alloc(region, num*sizeof(uint8_t*));
+       pd->rr_data = (uint8_t**)regional_alloc(region, num*sizeof(uint8_t*));
        if(!pd->rr_data)
                return NULL;
        /* fill in rrs */
@@ -829,5 +829,5 @@ anchors_lookup(struct val_anchors* anchors,
 size_t 
 anchors_get_mem(struct val_anchors* anchors)
 {
-       return sizeof(*anchors) + region_get_mem(anchors->region);
+       return sizeof(*anchors) + regional_get_mem(anchors->region);
 }
index b4f92c2dbc93d1f02931600898840ad791bdc009..2a9db472bc4a5bea73f8edde4a4df24ccdc81fb6 100644 (file)
@@ -42,7 +42,7 @@
 #ifndef VALIDATOR_VAL_ANCHOR_H
 #define VALIDATOR_VAL_ANCHOR_H
 #include "util/rbtree.h"
-struct region;
+struct regional;
 struct trust_anchor;
 struct config_file;
 struct ub_packed_rrset_key;
@@ -52,7 +52,7 @@ struct ub_packed_rrset_key;
  */
 struct val_anchors {
        /** region where trust anchors are allocated */
-       struct region* region;
+       struct regional* region;
        /**
         * Anchors are store in this tree. Sort order is chosen, so that
         * dnames are in nsec-like order. A lookup on class, name will return
index 56cef3f397edd1422393a282b5bfac4f2ff46fa2..2104eddd99775fcaf28db2f14812b5febdc65fc4 100644 (file)
@@ -119,7 +119,7 @@ key_cache_search(struct key_cache* kcache, uint8_t* name, size_t namelen,
 
 struct key_entry_key* 
 key_cache_obtain(struct key_cache* kcache, uint8_t* name, size_t namelen, 
-       uint16_t key_class, struct region* region)
+       uint16_t key_class, struct regional* region)
 {
        uint32_t now = time(NULL);
        /* keep looking until we find a nonexpired entry */
index 98fb9097bf34b1077d96907547ce0369f8a79e5a..5d767d405adca80af017c9f5427eaf68d52c8a31 100644 (file)
@@ -45,7 +45,7 @@
 struct key_entry_key;
 struct key_entry_data;
 struct config_file;
-struct region;
+struct regional;
 
 /**
  * Key cache
@@ -92,7 +92,7 @@ void key_cache_insert(struct key_cache* kcache, struct key_entry_key* kkey);
  */
 struct key_entry_key* key_cache_obtain(struct key_cache* kcache,
        uint8_t* name, size_t namelen, uint16_t key_class, 
-       struct region* region);
+       struct regional* region);
 
 /**
  * Get memory in use by the key cache.
index 8905b1640031902f19abf43161fa82b4ab7dbef9..b4c871fff92289c9f2db5b1ab6cfcf2bf558c2b2 100644 (file)
@@ -43,7 +43,7 @@
 #include "util/data/packed_rrset.h"
 #include "util/data/dname.h"
 #include "util/storage/lookup3.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/net_help.h"
 
 size_t 
@@ -102,13 +102,13 @@ key_entry_hash(struct key_entry_key* kk)
 }
 
 struct key_entry_key* 
-key_entry_copy_toregion(struct key_entry_key* kkey, struct region* region)
+key_entry_copy_toregion(struct key_entry_key* kkey, struct regional* region)
 {
        struct key_entry_key* newk;
-       newk = region_alloc_init(region, kkey, sizeof(*kkey));
+       newk = regional_alloc_init(region, kkey, sizeof(*kkey));
        if(!newk)
                return NULL;
-       newk->name = region_alloc_init(region, kkey->name, kkey->namelen);
+       newk->name = regional_alloc_init(region, kkey->name, kkey->namelen);
        if(!newk->name)
                return NULL;
        newk->entry.key = newk;
@@ -117,12 +117,12 @@ key_entry_copy_toregion(struct key_entry_key* kkey, struct region* region)
                struct key_entry_data *d = (struct key_entry_data*)
                        kkey->entry.data;
                struct key_entry_data *newd;
-               newd = region_alloc_init(region, d, sizeof(*d));
+               newd = regional_alloc_init(region, d, sizeof(*d));
                if(!newd)
                        return NULL;
                /* copy rrset */
                if(d->rrset_data) {
-                       newd->rrset_data = region_alloc_init(region,
+                       newd->rrset_data = regional_alloc_init(region,
                                d->rrset_data, 
                                packed_rrset_sizeof(d->rrset_data));
                        if(!newd->rrset_data)
@@ -201,21 +201,21 @@ key_entry_isbad(struct key_entry_key* kkey)
 
 /** setup key entry in region */
 static int
-key_entry_setup(struct region* region,
+key_entry_setup(struct regional* region,
        uint8_t* name, size_t namelen, uint16_t dclass, 
        struct key_entry_key** k, struct key_entry_data** d)
 {
-       *k = region_alloc(region, sizeof(**k));
+       *k = regional_alloc(region, sizeof(**k));
        if(!*k)
                return 0;
        memset(*k, 0, sizeof(**k));
        (*k)->entry.key = *k;
-       (*k)->name = region_alloc_init(region, name, namelen);
+       (*k)->name = regional_alloc_init(region, name, namelen);
        if(!(*k)->name)
                return 0;
        (*k)->namelen = namelen;
        (*k)->key_class = dclass;
-       *d = region_alloc(region, sizeof(**d));
+       *d = regional_alloc(region, sizeof(**d));
        if(!*d)
                return 0;
        (*k)->entry.data = *d;
@@ -223,7 +223,7 @@ key_entry_setup(struct region* region,
 }
 
 struct key_entry_key* 
-key_entry_create_null(struct region* region,
+key_entry_create_null(struct regional* region,
        uint8_t* name, size_t namelen, uint16_t dclass, uint32_t ttl)
 {
        struct key_entry_key* k;
@@ -238,7 +238,7 @@ key_entry_create_null(struct region* region,
 }
 
 struct key_entry_key* 
-key_entry_create_rrset(struct region* region,
+key_entry_create_rrset(struct regional* region,
        uint8_t* name, size_t namelen, uint16_t dclass,
        struct ub_packed_rrset_key* rrset)
 {
@@ -251,7 +251,7 @@ key_entry_create_rrset(struct region* region,
        d->ttl = rd->ttl + time(NULL);
        d->isbad = 0;
        d->rrset_type = ntohs(rrset->rk.type);
-       d->rrset_data = (struct packed_rrset_data*)region_alloc_init(region,
+       d->rrset_data = (struct packed_rrset_data*)regional_alloc_init(region,
                rd, packed_rrset_sizeof(rd));
        if(!d->rrset_data)
                return NULL;
@@ -260,7 +260,7 @@ key_entry_create_rrset(struct region* region,
 }
 
 struct key_entry_key* 
-key_entry_create_bad(struct region* region,
+key_entry_create_bad(struct regional* region,
        uint8_t* name, size_t namelen, uint16_t dclass)
 {
        struct key_entry_key* k;
@@ -275,25 +275,25 @@ key_entry_create_bad(struct region* region,
 }
 
 struct ub_packed_rrset_key* 
-key_entry_get_rrset(struct key_entry_key* kkey, struct region* region)
+key_entry_get_rrset(struct key_entry_key* kkey, struct regional* region)
 {
        struct key_entry_data* d = (struct key_entry_data*)kkey->entry.data;
        struct ub_packed_rrset_key* rrk;
        struct packed_rrset_data* rrd;
        if(!d || !d->rrset_data)
                return NULL;
-       rrk = region_alloc(region, sizeof(*rrk));
+       rrk = regional_alloc(region, sizeof(*rrk));
        if(!rrk)
                return NULL;
        memset(rrk, 0, sizeof(*rrk));
-       rrk->rk.dname = region_alloc_init(region, kkey->name, kkey->namelen);
+       rrk->rk.dname = regional_alloc_init(region, kkey->name, kkey->namelen);
        if(!rrk->rk.dname)
                return NULL;
        rrk->rk.dname_len = kkey->namelen;
        rrk->rk.type = htons(d->rrset_type);
        rrk->rk.rrset_class = htons(kkey->key_class);
        rrk->entry.key = rrk;
-       rrd = region_alloc_init(region, d->rrset_data, 
+       rrd = regional_alloc_init(region, d->rrset_data, 
                packed_rrset_sizeof(d->rrset_data));
        if(!rrd)
                return NULL;
index 95c6b61f82284e7c90425094c33f5f8c03e334b4..bda29113e2772f43ec4496b6a99780b1e6d95060 100644 (file)
@@ -42,7 +42,7 @@
 #ifndef VALIDATOR_VAL_KENTRY_H
 #define VALIDATOR_VAL_KENTRY_H
 struct packed_rrset_data;
-struct region;
+struct regional;
 struct ub_packed_rrset_key;
 #include "util/storage/lruhash.h"
 
@@ -108,7 +108,7 @@ void key_entry_hash(struct key_entry_key* kk);
  * @return newly region-allocated entry or NULL on a failure to allocate.
  */
 struct key_entry_key* key_entry_copy_toregion(struct key_entry_key* kkey, 
-       struct region* region);
+       struct regional* region);
 
 /**
  * Copy a key entry, malloced.
@@ -147,7 +147,7 @@ int key_entry_isbad(struct key_entry_key* kkey);
  * @param ttl: what ttl should the key have. relative.
  * @return new key entry or NULL on alloc failure
  */
-struct key_entry_key* key_entry_create_null(struct region* region,
+struct key_entry_key* key_entry_create_null(struct regional* region,
        uint8_t* name, size_t namelen, uint16_t dclass, uint32_t ttl);
 
 /**
@@ -159,7 +159,7 @@ struct key_entry_key* key_entry_create_null(struct region* region,
  * @param rrset: data for key entry. This is copied to the region.
  * @return new key entry or NULL on alloc failure
  */
-struct key_entry_key* key_entry_create_rrset(struct region* region,
+struct key_entry_key* key_entry_create_rrset(struct regional* region,
         uint8_t* name, size_t namelen, uint16_t dclass, 
        struct ub_packed_rrset_key* rrset);
 
@@ -171,7 +171,7 @@ struct key_entry_key* key_entry_create_rrset(struct region* region,
  * @param dclass: class of key entry. (host order);
  * @return new key entry or NULL on alloc failure
  */
-struct key_entry_key* key_entry_create_bad(struct region* region,
+struct key_entry_key* key_entry_create_bad(struct regional* region,
        uint8_t* name, size_t namelen, uint16_t dclass);
 
 /**
@@ -181,7 +181,7 @@ struct key_entry_key* key_entry_create_bad(struct region* region,
  * @return rrset copy; if no rrset or alloc error returns NULL.
  */
 struct ub_packed_rrset_key* key_entry_get_rrset(struct key_entry_key* kkey,
-       struct region* region);
+       struct regional* region);
 
 /**
  * Get keysize of the keyentry.
index 7849393003742d1bcaf4abaf871dd36128fc9768..8e78f54ca219262bcb66a958caf94d353844c90e 100644 (file)
@@ -44,7 +44,7 @@
 #include "validator/val_nsec3.h"
 #include "validator/validator.h"
 #include "validator/val_kentry.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/rbtree.h"
 #include "util/module.h"
 #include "util/net_help.h"
@@ -484,7 +484,7 @@ nsec3_hash_cmp(const void* c1, const void* c2)
 
 /** perform hash of name */
 static int
-nsec3_calc_hash(struct region* region, ldns_buffer* buf, 
+nsec3_calc_hash(struct regional* region, ldns_buffer* buf, 
        struct nsec3_cached_hash* c)
 {
        int algo = nsec3_get_algo(c->nsec3, c->rr);
@@ -503,7 +503,8 @@ nsec3_calc_hash(struct region* region, ldns_buffer* buf,
 #ifdef SHA_DIGEST_LENGTH
                case NSEC3_HASH_SHA1:
                        c->hash_len = SHA_DIGEST_LENGTH;
-                       c->hash = (uint8_t*)region_alloc(region, c->hash_len);
+                       c->hash = (uint8_t*)regional_alloc(region, 
+                               c->hash_len);
                        if(!c->hash)
                                return 0;
                        (void)SHA1((unsigned char*)ldns_buffer_begin(buf),
@@ -530,7 +531,7 @@ nsec3_calc_hash(struct region* region, ldns_buffer* buf,
 
 /** perform b32 encoding of hash */
 static int
-nsec3_calc_b32(struct region* region, ldns_buffer* buf, 
+nsec3_calc_b32(struct regional* region, ldns_buffer* buf, 
        struct nsec3_cached_hash* c)
 {
        int r;
@@ -542,14 +543,15 @@ nsec3_calc_b32(struct region* region, ldns_buffer* buf,
                return 0;
        }
        c->b32_len = (size_t)r;
-       c->b32 = region_alloc_init(region, ldns_buffer_begin(buf), c->b32_len);
+       c->b32 = regional_alloc_init(region, ldns_buffer_begin(buf), 
+               c->b32_len);
        if(!c->b32)
                return 0;
        return 1;
 }
 
 int
-nsec3_hash_name(rbtree_t* table, struct region* region, ldns_buffer* buf,
+nsec3_hash_name(rbtree_t* table, struct regional* region, ldns_buffer* buf,
        struct ub_packed_rrset_key* nsec3, int rr, uint8_t* dname, 
        size_t dname_len, struct nsec3_cached_hash** hash)
 {
@@ -569,7 +571,7 @@ nsec3_hash_name(rbtree_t* table, struct region* region, ldns_buffer* buf,
                return 1;
        }
        /* create a new entry */
-       c = (struct nsec3_cached_hash*)region_alloc(region, sizeof(*c));
+       c = (struct nsec3_cached_hash*)regional_alloc(region, sizeof(*c));
        if(!c) return 0;
        c->node.key = c;
        c->nsec3 = nsec3;
@@ -920,13 +922,13 @@ nsec3_prove_closest_encloser(struct module_env* env, struct nsec3_filter* flt,
 
 /** allocate a wildcard for the closest encloser */
 static uint8_t*
-nsec3_ce_wildcard(struct region* region, uint8_t* ce, size_t celen,
+nsec3_ce_wildcard(struct regional* region, uint8_t* ce, size_t celen,
        size_t* len)
 {
        uint8_t* nm;
        if(celen > LDNS_MAX_DOMAINLEN - 2)
                return 0; /* too long */
-       nm = (uint8_t*)region_alloc(region, celen+2);
+       nm = (uint8_t*)regional_alloc(region, celen+2);
        if(!nm) {
                log_err("nsec3 wildcard: out of memory");
                return 0; /* alloc failure */
index 0b691edfbb2380f0ec123f9a16f196357972e8f5..b6f914ef7d154f872990efcfe738afe7c1a9be06 100644 (file)
@@ -68,7 +68,7 @@
 #define VALIDATOR_VAL_NSEC3_H
 #include "util/rbtree.h"
 struct val_env;
-struct region;
+struct regional;
 struct module_env;
 struct ub_packed_rrset_key;
 enum sec_status;
@@ -266,7 +266,7 @@ int nsec3_hash_cmp(const void* c1, const void* c2);
  *     0 on a malloc failure.
  *     -1 if the NSEC3 rr was badly formatted (i.e. formerr).
  */
-int nsec3_hash_name(rbtree_t* table, struct region* region, ldns_buffer* buf,
+int nsec3_hash_name(rbtree_t* table, struct regional* region, ldns_buffer* buf,
        struct ub_packed_rrset_key* nsec3, int rr, uint8_t* dname, 
        size_t dname_len, struct nsec3_cached_hash** hash);
 
index dfc72fac8b6f7b20b87dfd1283b284cfb6c50f11..353e0550a5138eac77fb51e3cf22bae41d4a9e45 100644 (file)
@@ -49,7 +49,7 @@
 #include "util/rbtree.h"
 #include "util/module.h"
 #include "util/net_help.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 
 #ifndef HAVE_SSL
 #error "Need SSL library to do digital signature cryptography"
@@ -342,7 +342,7 @@ int ds_digest_match_dnskey(struct module_env* env,
                return 0; /* DS algorithm and digest do not match */
        }
 
-       digest = region_alloc(env->scratch, digestlen);
+       digest = regional_alloc(env->scratch, digestlen);
        if(!digest) {
                verbose(VERB_DETAIL, "DS fail: out of memory");
                return 0; /* mem error */
@@ -1007,7 +1007,7 @@ canonicalize_rdata(ldns_buffer* buf, struct ub_packed_rrset_key* rrset,
  * @return false on alloc error.
  */
 static int
-rrset_canonical(struct region* region, ldns_buffer* buf, 
+rrset_canonical(struct regional* region, ldns_buffer* buf, 
        struct ub_packed_rrset_key* k, uint8_t* sig, size_t siglen,
        struct rbtree_t** sortree)
 {
@@ -1018,11 +1018,11 @@ rrset_canonical(struct region* region, ldns_buffer* buf,
        struct canon_rr* rrs;
 
        if(!*sortree) {
-               *sortree = (struct rbtree_t*)region_alloc(region, 
+               *sortree = (struct rbtree_t*)regional_alloc(region, 
                        sizeof(rbtree_t));
                if(!*sortree)
                        return 0;
-               rrs = region_alloc(region, sizeof(struct canon_rr)*d->count);
+               rrs = regional_alloc(region, sizeof(struct canon_rr)*d->count);
                if(!rrs) {
                        *sortree = NULL;
                        return 0;
@@ -1272,7 +1272,7 @@ verify_canonrrset(ldns_buffer* buf, int algo, unsigned char* sigblock,
 }
 
 enum sec_status 
-dnskey_verify_rrset_sig(struct region* region, ldns_buffer* buf, 
+dnskey_verify_rrset_sig(struct regional* region, ldns_buffer* buf, 
        struct val_env* ve,
         struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey,
         size_t dnskey_idx, size_t sig_idx,
index 08cb8a348ca089656f458782089e499183908c1c..c838897a8b31fc41fc80465c28d0271560a1bfe5 100644 (file)
@@ -48,7 +48,7 @@ struct module_env;
 struct ub_packed_rrset_key;
 enum sec_status;
 struct rbtree_t;
-struct region;
+struct regional;
 
 /** 
  * Check if dnskey matches a DS digest 
@@ -194,7 +194,7 @@ enum sec_status dnskeyset_verify_rrset_sig(struct module_env* env,
  * @return secure if this key signs this signature. unchecked on error or 
  *     bogus if it did not validate.
  */
-enum sec_status dnskey_verify_rrset_sig(struct region* region, 
+enum sec_status dnskey_verify_rrset_sig(struct regional* region, 
        ldns_buffer* buf, struct val_env* ve, 
        struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey, 
        size_t dnskey_idx, size_t sig_idx,
index c882ca8a9d9318b94b8c4805cda60362823e168c..8947d665c1ae7a45551871328093b95512ffb6c9 100644 (file)
@@ -50,7 +50,7 @@
 #include "util/data/dname.h"
 #include "util/net_help.h"
 #include "util/module.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 
 enum val_classification 
 val_classify_response(uint16_t query_flags, struct query_info* qinf, 
@@ -311,7 +311,7 @@ val_verify_rrset(struct module_env* env, struct val_env* ve,
                ntohs(rrset->rk.type), ntohs(rrset->rk.rrset_class));
        sec = dnskeyset_verify_rrset(env, ve, rrset, keys);
        verbose(VERB_ALGO, "verify result: %s", sec_status_to_string(sec));
-       region_free_all(env->scratch);
+       regional_free_all(env->scratch);
 
        /* update rrset security status 
         * only improves security status 
@@ -395,7 +395,7 @@ verify_dnskeys_with_ds_rr(struct module_env* env, struct val_env* ve,
 }
 
 struct key_entry_key* 
-val_verify_new_DNSKEYs(struct region* region, struct module_env* env, 
+val_verify_new_DNSKEYs(struct regional* region, struct module_env* env, 
        struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset, 
        struct ub_packed_rrset_key* ds_rrset)
 {
index cd4579ed0d0c141618718d7a9eec67db3449fb3f..fc2dd8f7bd035741a885675d33ba3e3a3847e3be 100644 (file)
@@ -47,7 +47,7 @@ struct val_env;
 struct module_env;
 struct ub_packed_rrset_key;
 struct key_entry_key;
-struct region;
+struct regional;
 struct val_anchors;
 struct rrset_cache;
 enum sec_status;
@@ -150,7 +150,7 @@ enum sec_status val_verify_rrset_entry(struct module_env* env,
  *         this sort of thing is checked before fetching the matching DNSKEY
  *         rrset.
  */
-struct key_entry_key* val_verify_new_DNSKEYs(struct region* region, 
+struct key_entry_key* val_verify_new_DNSKEYs(struct regional* region, 
        struct module_env* env, struct val_env* ve, 
        struct ub_packed_rrset_key* dnskey_rrset, 
        struct ub_packed_rrset_key* ds_rrset);
index 126b0918d553cf850877bde53b80e87e08982419..9cfe53423aed8eb0ecafad3af88151dfe38586ad 100644 (file)
@@ -52,7 +52,7 @@
 #include "util/module.h"
 #include "util/log.h"
 #include "util/net_help.h"
-#include "util/region-allocator.h"
+#include "util/regional.h"
 #include "util/config_file.h"
 #include "util/fptr_wlist.h"
 
@@ -171,7 +171,7 @@ val_deinit(struct module_env* env, int id)
 static struct val_qstate*
 val_new(struct module_qstate* qstate, int id)
 {
-       struct val_qstate* vq = (struct val_qstate*)region_alloc(
+       struct val_qstate* vq = (struct val_qstate*)regional_alloc(
                qstate->region, sizeof(*vq));
        log_assert(!qstate->minfo[id]);
        if(!vq)
@@ -182,12 +182,12 @@ val_new(struct module_qstate* qstate, int id)
        if(!qstate->return_msg || qstate->return_rcode != LDNS_RCODE_NOERROR) {
                /* create a message to verify */
                verbose(VERB_ALGO, "constructing reply for validation");
-               vq->orig_msg = (struct dns_msg*)region_alloc(qstate->region,
+               vq->orig_msg = (struct dns_msg*)regional_alloc(qstate->region,
                        sizeof(struct dns_msg));
                if(!vq->orig_msg)
                        return NULL;
                vq->orig_msg->qinfo = qstate->qinfo;
-               vq->orig_msg->rep = (struct reply_info*)region_alloc(
+               vq->orig_msg->rep = (struct reply_info*)regional_alloc(
                        qstate->region, sizeof(struct reply_info));
                if(!vq->orig_msg->rep)
                        return NULL;
@@ -200,11 +200,12 @@ val_new(struct module_qstate* qstate, int id)
        }
        vq->qchase = qstate->qinfo;
        /* chase reply will be an edited (sub)set of the orig msg rrset ptrs */
-       vq->chase_reply = region_alloc_init(qstate->region, vq->orig_msg->rep,
+       vq->chase_reply = regional_alloc_init(qstate->region, 
+               vq->orig_msg->rep, 
                sizeof(struct reply_info) - sizeof(struct rrset_ref));
        if(!vq->chase_reply)
                return NULL;
-       vq->chase_reply->rrsets = region_alloc_init(qstate->region,
+       vq->chase_reply->rrsets = regional_alloc_init(qstate->region,
                vq->orig_msg->rep->rrsets, sizeof(struct ub_packed_rrset_key*)
                        * vq->orig_msg->rep->rrset_count);
        if(!vq->chase_reply->rrsets)
@@ -1907,7 +1908,7 @@ process_ds_response(struct module_qstate* qstate, struct val_qstate* vq,
                        return;
        }
        if(dske == NULL) {
-               vq->empty_DS_name = region_alloc_init(qstate->region,
+               vq->empty_DS_name = regional_alloc_init(qstate->region,
                        qinfo->qname, qinfo->qname_len);
                if(!vq->empty_DS_name) {
                        log_err("malloc failure in empty_DS_name");