]> jfr.im git - irc/quakenet/newserv.git/commitdiff
Merge default.
authorGunnar Beutner <redacted>
Fri, 26 Jul 2013 21:17:34 +0000 (23:17 +0200)
committerGunnar Beutner <redacted>
Fri, 26 Jul 2013 21:17:34 +0000 (23:17 +0200)
--HG--
branch : shroudsstring

core/main.c
core/nsmalloc.c
core/nsmalloc.h
request/request_fasttrack.c

index d2b9ec53a25751b7d1f0623bb2cdad5dd010ddd1..e958c9f034c651297391b8fe96093c8473087426 100644 (file)
@@ -14,6 +14,7 @@
 #include <time.h>
 #include <sys/time.h>
 #include <signal.h>
+#include <unistd.h>
 
 void initseed();
 void init_logfile();
index eb07aceeecd4531b7c2839aacefd080a8317498a..7208b0f0688081fce29dcc232c64555ce0a968b0 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <assert.h>
 
 #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);
index dc4430878b14b18dd90cc62ad4342dfafbe83131..2e46d6b1766215d4ef95a2459910c88ad8243178 100644 (file)
@@ -13,6 +13,7 @@
 #define endpools() nsmallocpools; extern char *nsmpoolnames[MAXPOOL];
 
 #include <stdlib.h>
+#include <stdint.h>
 
 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[];
 };
 
index 7cfd91858afb7a8af583f6f39c2aa74d6e8895ef..4ff2e780806e3bea87a46811a111c26a1919f791 100644 (file)
@@ -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;j<NICKHASHSIZE && !foundnick;j++) {
       for(tnp=nicktable[j];tnp;tnp=tnp->next) {
         if(tnp->exts[rqnext]==ft) {