1 /*
2  * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 #ifndef SQUID_LEAKFINDER_H
10 #define SQUID_LEAKFINDER_H
11 
12 #if USE_LEAKFINDER
13 
14 #include "hash.h"
15 
16 #define leakAdd(p,l) if (l) l->addSome(p,__FILE__,__LINE__)
17 #define leakTouch(p,l) if (l) l->touch(p,__FILE__,__LINE__)
18 #define leakFree(p,l) if (l) l->freeSome(p,__FILE__,__LINE__)
19 
20 class LeakFinderPtr : public hash_link
21 {
22 
23 public:
24     LeakFinderPtr(void *, const char *, const int);
25     const char *file;
26     int line;
27     time_t when;
28 };
29 
30 class LeakFinder
31 {
32 
33 public:
34     LeakFinder();
35     ~LeakFinder();
36 
37     void *addSome(void *, const char *, const int);
38 
39     void *touch(void *, const char *, const int);
40 
41     void *freeSome(void *, const char *, const int);
42 
43     void dump();
44 
45 private:
46     static HASHCMP cmp;
47 
48     static HASHHASH hash;
49 
50     hash_table *table;
51 
52     int count;
53 
54     time_t last_dump;
55 
56 };
57 
58 #else /* USE_LEAKFINDER */
59 
60 class LeakFinder {};
61 
62 #define leakAdd(p,l) (void)0
63 #define leakTouch(p,l) (void)0
64 #define leakFree(p,l) (void)0
65 #endif /* USE_LEAKFINDER */
66 
67 #endif /* SQUID_LEAKFINDER_H */
68 
69