From: Gunnar Beutner Date: Fri, 26 Jul 2013 21:17:34 +0000 (+0200) Subject: Merge default. X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/commitdiff_plain/9daf3d166b2002619646db25a3dacf62253ecbea?hp=6331db288c2bea946eef4ca4d6332bf5444bf5e5 Merge default. --HG-- branch : shroudsstring --- diff --git a/core/main.c b/core/main.c index d2b9ec53..e958c9f0 100644 --- a/core/main.c +++ b/core/main.c @@ -14,6 +14,7 @@ #include #include #include +#include void initseed(); void init_logfile(); diff --git a/core/nsmalloc.c b/core/nsmalloc.c index eb07acee..7208b0f0 100644 --- a/core/nsmalloc.c +++ b/core/nsmalloc.c @@ -2,6 +2,7 @@ #include #include +#include #include "nsmalloc.h" #define __NSMALLOC_C @@ -34,16 +35,16 @@ void *nsmalloc(unsigned int poolid, size_t size) { nsmpools[poolid].count++; if (nsmpools[poolid].blocks) { - VALGRIND_MAKE_MEM_DEFINED(nsmpools[poolid].blocks, sizeof(struct nsminfo)); nsmpools[poolid].blocks->prev = nsmp; - VALGRIND_MAKE_MEM_UNDEFINED(nsmpools[poolid].blocks, sizeof(struct nsminfo)); } nsmp->next=nsmpools[poolid].blocks; nsmp->prev=NULL; nsmpools[poolid].blocks=nsmp; VALGRIND_MEMPOOL_ALLOC(nsmp, nsmp->data, nsmp->size); - VALGRIND_MAKE_MEM_NOACCESS(nsmp, sizeof(struct nsminfo)); + + nsmp->redzone = REDZONE_MAGIC; + VALGRIND_MAKE_MEM_NOACCESS(&nsmp->redzone, sizeof(nsmp->redzone)); return (void *)nsmp->data; } @@ -70,19 +71,16 @@ void nsfree(unsigned int poolid, void *ptr) { /* evil */ nsmp=(struct nsminfo*)ptr - 1; - VALGRIND_MAKE_MEM_DEFINED(nsmp, sizeof(struct nsminfo)); + VALGRIND_MAKE_MEM_DEFINED(&nsmp->redzone, sizeof(nsmp->redzone)); + assert(nsmp->redzone == REDZONE_MAGIC); if (nsmp->prev) { - VALGRIND_MAKE_MEM_DEFINED(nsmp->prev, sizeof(struct nsminfo)); nsmp->prev->next = nsmp->next; - VALGRIND_MAKE_MEM_UNDEFINED(nsmp->prev, sizeof(struct nsminfo)); } else nsmpools[poolid].blocks = NULL; if (nsmp->next) { - VALGRIND_MAKE_MEM_DEFINED(nsmp->next, sizeof(struct nsminfo)); nsmp->next->prev = nsmp->prev; - VALGRIND_MAKE_MEM_UNDEFINED(nsmp->next, sizeof(struct nsminfo)); } nsmpools[poolid].size-=nsmp->size; @@ -114,16 +112,12 @@ void *nsrealloc(unsigned int poolid, void *ptr, size_t size) { VALGRIND_MAKE_MEM_DEFINED(nsmp, sizeof(struct nsminfo)); - if (size == nsmp->size) { - VALGRIND_MAKE_MEM_UNDEFINED(nsmp, sizeof(struct nsminfo)); + if (size == nsmp->size) return (void *)nsmp->data; - } nsmpn=(struct nsminfo *)realloc(nsmp, sizeof(struct nsminfo)+size); - if (!nsmpn) { - VALGRIND_MAKE_MEM_UNDEFINED(nsmp, sizeof(struct nsminfo)); + if (!nsmpn) return NULL; - } VALGRIND_MOVE_MEMPOOL(nsmp, nsmpn); @@ -131,20 +125,15 @@ void *nsrealloc(unsigned int poolid, void *ptr, size_t size) { nsmpn->size=size; if (nsmpn->prev) { - VALGRIND_MAKE_MEM_DEFINED(nsmpn->prev, sizeof(struct nsminfo)); nsmpn->prev->next=nsmpn; - VALGRIND_MAKE_MEM_UNDEFINED(nsmpn->prev, sizeof(struct nsminfo)); } else nsmpools[poolid].blocks = nsmpn; if (nsmpn->next) { - VALGRIND_MAKE_MEM_DEFINED(nsmpn->next, sizeof(struct nsminfo)); nsmpn->next->prev=nsmpn; - VALGRIND_MAKE_MEM_UNDEFINED(nsmpn->next, sizeof(struct nsminfo)); } VALGRIND_MEMPOOL_CHANGE(nsmpn, nsmp->data, nsmpn->data, nsmpn->size); - VALGRIND_MAKE_MEM_UNDEFINED(nsmpn, sizeof(struct nsminfo)); return (void *)nsmpn->data; } @@ -156,7 +145,6 @@ void nsfreeall(unsigned int poolid) { return; for (nsmp=nsmpools[poolid].blocks;nsmp;nsmp=nnsmp) { - VALGRIND_MAKE_MEM_DEFINED(nsmp, sizeof(struct nsminfo)); nnsmp=nsmp->next; VALGRIND_MEMPOOL_FREE(nsmp, nsmp->data); free(nsmp); diff --git a/core/nsmalloc.h b/core/nsmalloc.h index dc443087..2e46d6b1 100644 --- a/core/nsmalloc.h +++ b/core/nsmalloc.h @@ -13,6 +13,7 @@ #define endpools() nsmallocpools; extern char *nsmpoolnames[MAXPOOL]; #include +#include void *nsmalloc(unsigned int poolid, size_t size); void nsfree(unsigned int poolid, void *ptr); @@ -24,12 +25,13 @@ void nscheckfreeall(unsigned int poolid); void *nscalloc(unsigned int poolid, size_t nmemb, size_t size); #define MAXPOOL 100 - +#define REDZONE_MAGIC 0x243653E957851F68ULL struct nsminfo { struct nsminfo *next; struct nsminfo *prev; size_t size; + uint64_t redzone; char data[]; }; diff --git a/request/request_fasttrack.c b/request/request_fasttrack.c index 7cfd9185..4ff2e780 100644 --- a/request/request_fasttrack.c +++ b/request/request_fasttrack.c @@ -75,11 +75,11 @@ static void rq_cleanup_fasttrack(void *arg) { now = getnettime(); - pft = &ftlist; - - for(ft=*pft;*pft;pft=&((*pft)->next)) { + for(pft=&ftlist;*pft;pft=&((*pft)->next)) { int foundnick = 0; + ft = *pft; + for(j=0;jnext) { if(tnp->exts[rqnext]==ft) {