X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Flib%2Fsmartall.h;h=4973f4fa255819c4a6fd5ca6ed3896bc6b08d975;hb=8944db1b635424752b455e55dfc73cf4f26860d5;hp=1ddd3cacffa0aa2f89adbb14898ab3a11db32cd7;hpb=8e94b30da91f44a8a0d39de5c493983cfd08884e;p=bacula%2Fbacula diff --git a/bacula/src/lib/smartall.h b/bacula/src/lib/smartall.h index 1ddd3cacff..4973f4fa25 100644 --- a/bacula/src/lib/smartall.h +++ b/bacula/src/lib/smartall.h @@ -1,25 +1,38 @@ /* - - Definitions for the smart memory allocator - - Version $Id$ - + Bacula® - The Network Backup Solution + + Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version three of the GNU Affero General Public + License as published by the Free Software Foundation and included + in the file LICENSE. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of Kern Sibbald. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. */ - /* - Copyright (C) 2000-2005 Kern Sibbald - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. + Definitions for the smart memory allocator - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. +*/ - */ +#ifndef SMARTALLOC_H +#define SMARTALLOC_H extern uint64_t DLL_IMP_EXP sm_max_bytes; extern uint64_t DLL_IMP_EXP sm_bytes; @@ -40,13 +53,15 @@ extern void *sm_malloc(const char *fname, int lineno, unsigned int nbytes), *actuallyrealloc(void *ptr, unsigned int size); extern void sm_free(const char *fname, int lineno, void *fp); extern void actuallyfree(void *cp), - sm_dump(bool bufdump), sm_static(int mode); + sm_dump(bool bufdump, bool in_use=false), sm_static(int mode); extern void sm_new_owner(const char *fname, int lineno, char *buf); #ifdef SMCHECK +#define Dsm_check(lvl) if ((lvl)<=debug_level) sm_check(__FILE__, __LINE__, true) extern void sm_check(const char *fname, int lineno, bool bufdump); extern int sm_check_rtn(const char *fname, int lineno, bool bufdump); #else +#define Dsm_check(lvl) #define sm_check(f, l, fl) #define sm_check_rtn(f, l, fl) 1 #endif @@ -73,8 +88,8 @@ extern int sm_check_rtn(const char *fname, int lineno, bool bufdump); #define sm_dump(x) #define sm_static(x) #define sm_new_owner(a, b, c) -#define sm_malloc(f, l, n) malloc(n) - +#define sm_malloc(f, l, n) malloc(n) +#define sm_free(f, l, n) free(n) #define sm_check(f, l, fl) #define sm_check_rtn(f, l, fl) 1 @@ -85,49 +100,56 @@ extern void *b_malloc(); #endif #ifdef SMARTALLOC -// #ifdef xxx #define New(type) new(__FILE__, __LINE__) type +/* We do memset(0) because it's not possible to memset a class when + * using subclass with virtual functions + */ + class SMARTALLOC { public: void *operator new(size_t s, const char *fname, int line) { - void *p = sm_malloc(fname, line, s > sizeof(int) ? (unsigned int)s : sizeof(int)); - return p; + size_t size = s > sizeof(int) ? (unsigned int)s : sizeof(int); + void *p = sm_malloc(fname, line, size); + memset(p, 0, size); + return p; } void *operator new[](size_t s, const char *fname, int line) { - void *p = sm_malloc(fname, line, s > sizeof(int) ? (unsigned int)s : sizeof(int)); + size_t size = s > sizeof(int) ? (unsigned int)s : sizeof(int); + void *p = sm_malloc(fname, line, size); + memset(p, 0, size); return p; } + void operator delete(void *ptr) { free(ptr); } -void operator delete[](void *ptr, size_t i) +void operator delete[](void *ptr, size_t /*i*/) { free(ptr); } -void operator delete(void *ptr, const char *fname, int line) +void operator delete(void *ptr, const char * /*fname*/, int /*line*/) { free(ptr); } -void operator delete[](void *ptr, size_t i, const char *fname, int line) +void operator delete[](void *ptr, size_t /*i*/, + const char * /*fname*/, int /*line*/) { free(ptr); } - private: -void *operator new(size_t s) throw() { return 0; } -void *operator new[](size_t s) throw() { return 0; } +void *operator new(size_t s) throw() { (void)s; return 0; } +void *operator new[](size_t s) throw() { (void)s; return 0; } }; - #else #define New(type) new type @@ -135,21 +157,23 @@ void *operator new[](size_t s) throw() { return 0; } class SMARTALLOC { public: - void *operator new(size_t s) - { - return malloc(s); + void *operator new(size_t s) { + void *p = malloc(s); + memset(p, 0, s); + return p; } - void *operator new[](size_t s) - { - return malloc(s); + void *operator new[](size_t s) { + void *p = malloc(s); + memset(p, 0, s); + return p; } - void operator delete(void *ptr) - { + void operator delete(void *ptr) { free(ptr); } - void operator delete[](void *ptr, size_t i) - { + void operator delete[](void *ptr, size_t i) { free(ptr); } }; -#endif +#endif /* SMARTALLOC */ + +#endif /* !SMARTALLOC_H */