Commit Graph

150 Commits

Author SHA1 Message Date
Jeff Morriss 3161977bf8 Introduce ep_strconcat (copied from the glib version)
svn path=/trunk/; revision=36344
2011-03-26 02:39:04 +00:00
Jeff Morriss b838995e60 Remove some duplicated string manipulation code.
svn path=/trunk/; revision=36343
2011-03-26 02:11:42 +00:00
Jeff Morriss 06aaf02fba Clean up comments: canaries are also used to pad allocations to an 8-byte boundary.
svn path=/trunk/; revision=36071
2011-02-25 15:49:28 +00:00
Jeff Morriss 16f704d831 Add a comment explaining what the canary between allocations looks like.
svn path=/trunk/; revision=36065
2011-02-25 03:18:02 +00:00
Gerald Combs a6bbdaa849 Fix some dead code and zero division issues found by Clang scan-build.
In convert_string_case() use g_utf8_strup() instead of converting each
character by hand. Hopefully this won't cause any unexpected changes in
behavior.

svn path=/trunk/; revision=36006
2011-02-18 22:43:48 +00:00
Stephen Fisher 9c28650e67 Fix bug #5463 (and likely others) so that ep_strbuf_new() no longer
truncates newly created and copied strings.  The problem was that
strlen() (which returns a length not counting the NULL terminator) was
being mixed with functions that do malloc() (which need to allocate
memory large enough to inculde the NULL string terminator).


svn path=/trunk/; revision=35128
2010-12-06 17:30:08 +00:00
Jeff Morriss 7d20440ff0 Introduce 2 new environment variables: WIRESHARK_EP_VERIFY_POINTERS and
WIRESHARK_SE_VERIFY_POINTERS that control whether or not we verify if a given
pointer is ep_ or se_ allocated, respectively.

Turn the behavior off by default for speed reasons (the speed difference isn't
huge, but...).

Turn the behavior on when fuzz testing.

Document these two new variables in the man pages.

svn path=/trunk/; revision=34046
2010-09-02 18:02:06 +00:00
Guy Harris 60d5efc2a3 In C, foo() isn't a function with no arguments, foo(void) is.
svn path=/trunk/; revision=32422
2010-04-08 02:26:56 +00:00
Stig Bjørlykke f57d6e2095 From Alex Lindberg via bug 4463:
Added se_tree_lookup32_array_le to emem.[ch].  This function is similar to
se_tree_lookup32_le already defined.

Updated README.binarytrees to reflect this added function and corrected minor
spelling issues.

svn path=/trunk/; revision=31812
2010-02-07 11:01:13 +00:00
Anders Broman 8c07e34123 Reversion of SVN 30488 as suggested in https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4450.
"g_strlcpy() assumes that src *IS* ASCII NUL terminated.  If the src buffer is
not NUL terminated, g_strlcpy() *WILL* read past the end of the buffer."

svn path=/trunk/; revision=31782
2010-02-04 06:42:04 +00:00
Bill Meier 9d663d7081 Fix various gcc -Wshadow warnings.
svn path=/trunk/; revision=31720
2010-01-28 18:45:46 +00:00
Anders Broman db64e65ec2 From Jakub Zawadzki:
mmap() actually when fail returns MAP_FAILED (-1) not NULL
Part of Bug:
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4140

svn path=/trunk/; revision=31593
2010-01-20 20:26:01 +00:00
Anders Broman 27bc3e2211 From Jakub Zawadzki:
Fix some bugs after merge.
Part of Bug:
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4140

svn path=/trunk/; revision=31586
2010-01-20 06:37:56 +00:00
Ronnie Sahlberg f817636cc6 remove an unusued variable
svn path=/trunk/; revision=31582
2010-01-20 03:55:03 +00:00
Anders Broman 2183430a29 From Jakub Zawadzki:
Embed canary list inside chunk data.
Part of Bug:
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4140

svn path=/trunk/; revision=31577
2010-01-19 21:28:48 +00:00
Anders Broman 46501fd7f6 From Jakub Zawadzki:
Make emem_create_chunk() a function.
Part of Bug:
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4140

svn path=/trunk/; revision=31576
2010-01-19 20:54:27 +00:00
Anders Broman 8e276fa139 From Jakub Zawadzki:
Cleanup emem_create_chunk() - move common code outside #ifdef's
Part of Bug:
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4140

svn path=/trunk/; revision=31575
2010-01-19 20:53:02 +00:00
Gerald Combs 9417a7c86f From Jakub Zawadzki via bug 4274:
Switch back to checking size instead of asize in emem_alloc_chunk. Make
sure we don't try to cross the streams by allocating a negative amount
of memory in the LTP dissector.

svn path=/trunk/; revision=31132
2009-11-30 17:31:13 +00:00
Stig Bjørlykke d577ca0fa7 Guard #include <sys/types.h> with HAVE_SYS_TYPES_H.
svn path=/trunk/; revision=31053
2009-11-23 18:47:52 +00:00
Gerald Combs 483711e3f5 Add a comment about using memcpy for scrubbing.
svn path=/trunk/; revision=30680
2009-10-23 21:07:28 +00:00
Jeff Morriss 78318b32ee Add emem_init() which initializes both the ep_ and se_ allocators; have all
callers use that instead of initializing each allocator individually.

svn path=/trunk/; revision=30646
2009-10-20 17:43:05 +00:00
Jeff Morriss 38cb8e82c3 Don't call xx_init_chunk() in ep_free_all() and se_free_all() if we're not
using chunks.  With this change, xx_init_chunk() are only called once at
startup (as their comments imply).

Instead, set free_list to NULL in emem_free_all() (if we're not using chunks).

svn path=/trunk/; revision=30644
2009-10-20 17:16:40 +00:00
Jeff Morriss ab13546f71 From Jakub Zawadzki via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4140 :
There is emem_header_t struct, so IMHO is better to use struct instead of
global variables.

Split emem_alloc() into two functions: emem_alloc_chunk and emem_alloc_glib.
Current allocator is available in emem_header_t.memory_alloc

It should be easier to develop new memory allocator and maintain current.
It might also give some speedup (we don't need to check mem->debug_use_chunks
every time :)

From me:

Initialize emem_header_t.trees.  Some indentation cleanup.

svn path=/trunk/; revision=30624
2009-10-19 22:31:08 +00:00
Jeff Morriss c293e4d024 Introduce an optional (ep_ and se_) memory scrubber. When activated (export
WIRESHARK_DEBUG_SCRUB_MEMORY to turn it on) this function initializes all
allocated memory to 0xBADDCAFE and all freed memory to 0xDEADBEEF.  (Of course
the allocation functions like ep_alloc0() re-initialize the allocated memory
back to 0.)

svn path=/trunk/; revision=30579
2009-10-16 21:36:42 +00:00
Kovarththanan Rajaratnam cc6d443867 Use G_MEM_ALIGN when we have to determine the amount of padding needed instead of hard coding it to 8 bytes alignment.
Before:

Allocation distribution (sizes include canaries):
size <    32:   454120
size <    64:   401506

After:

Allocation distribution (sizes include canaries):
size <    32:   457281
size <    64:   398345

svn path=/trunk/; revision=30496
2009-10-11 08:20:40 +00:00
Kovarththanan Rajaratnam 5ea31fa450 Rename emem_canary => emem_canary_init to make it clear that the function initializes the canary
svn path=/trunk/; revision=30493
2009-10-11 07:15:15 +00:00
Kovarththanan Rajaratnam 876f39f5a3 Only check to see if 'free_list' is empty when we've just moved over a chunk to the 'used_list'
svn path=/trunk/; revision=30492
2009-10-11 07:07:05 +00:00
Kovarththanan Rajaratnam 4255bd2e53 Tighten scope of some variables in emem_alloc()
svn path=/trunk/; revision=30491
2009-10-11 06:34:02 +00:00
Kovarththanan Rajaratnam 932f307117 Change EMEM_PACKET_CHUNK_SIZE to (10 * 1024 * 1024) to make it easier to see that we allocate in 10 MB chunks.
svn path=/trunk/; revision=30490
2009-10-11 06:26:24 +00:00
Kovarththanan Rajaratnam c394047159 Use g_strlcpy instead of providing our own string copy implementation
svn path=/trunk/; revision=30488
2009-10-11 06:04:58 +00:00
Kovarththanan Rajaratnam b5ce884cf4 Use memcpy when we already know the length of the string
svn path=/trunk/; revision=30487
2009-10-11 05:53:10 +00:00
Jeff Morriss 325ce121d8 Print statistics to stderr so we can see (only) them when using tshark.
svn path=/trunk/; revision=30452
2009-10-09 21:27:46 +00:00
Jeff Morriss 3cf628c417 Unify the stats output regardless of whether we're using canaries or not. Fix some math/calculation issues (including taking the guard pages into account when calculating waste). Since we've already counted the SE allocations for the distribution display, use that (instead of the canaries) to count how many allocations we've had.
svn path=/trunk/; revision=30449
2009-10-09 21:00:00 +00:00
Kovarththanan Rajaratnam a8ca8d1815 Call emem_canary() immediately
svn path=/trunk/; revision=30403
2009-10-08 14:48:43 +00:00
Kovarththanan Rajaratnam 03f934d183 From Harald Welte via bug 4106:
Fix 'cast from pointer to integer of different size'

svn path=/trunk/; revision=30402
2009-10-08 14:40:23 +00:00
Kovarththanan Rajaratnam ef48a237ed Remove debug g_warning()
svn path=/trunk/; revision=30399
2009-10-08 13:24:03 +00:00
Anders Broman 2e3bc6bcc2 Dont use canaries for SE allocated memory as a default the owerhead
is to big when allocating lot's of memory. EP memory does not suffer as much as we seems to only allocate one chunk for EP memory.

svn path=/trunk/; revision=30397
2009-10-08 11:46:15 +00:00
Jeff Morriss 6a7c00894d Add some SE allocation statistics (if SHOW_MEM_STATS is defined).
Add print_alloc_stats() will show some (hopefully useful) statistics about the
memory we have allocated, the average allocation size, the amount of
overhead/waste, etc.

svn path=/trunk/; revision=30371
2009-10-06 16:20:26 +00:00
Anders Broman 570208780b Increase EMEM_ALLOCS_PER_CHUNK to avoid memory waist.
svn path=/trunk/; revision=30356
2009-10-06 10:10:33 +00:00
Kovarththanan Rajaratnam 978bd4982d Use g_free() (should have been part of r30342)
svn path=/trunk/; revision=30347
2009-10-05 19:18:09 +00:00
Kovarththanan Rajaratnam e567d96a93 Use g_malloc()
svn path=/trunk/; revision=30342
2009-10-05 18:20:38 +00:00
Stig Bjørlykke e362a37cbc Ensure we don't dereference a null pointer.
Made emem_canary() static.

svn path=/trunk/; revision=30186
2009-09-29 06:50:35 +00:00
Kovarththanan Rajaratnam 7ba4fb4ba8 Make sure that we also traverse the free_list while looking for valid pointers
svn path=/trunk/; revision=30113
2009-09-24 13:37:02 +00:00
Kovarththanan Rajaratnam 8f0d93fb12 Add unsigned int type cast
svn path=/trunk/; revision=30037
2009-09-21 14:01:30 +00:00
Kovarththanan Rajaratnam 859bd0f8b2 Make sure that we track the amount allocated when we're doling out memory from the system pool. The verify pointer stuff should should now work with WIRESHARK_DEBUG_EP_NO_CHUNKS=1 and WIRESHARK_DEBUG_SE_NO_CHUNKS=1
svn path=/trunk/; revision=30032
2009-09-21 10:44:59 +00:00
Kovarththanan Rajaratnam 1a61b42e8a Add ep_verify_pointer()/se_verify_pointer() which checks whether the given pointer belongs in the seasonal/ephemeral pool.
svn path=/trunk/; revision=30011
2009-09-20 12:02:40 +00:00
Kovarththanan Rajaratnam 2d37d1816d Remove unused/dead code
svn path=/trunk/; revision=30009
2009-09-20 09:32:52 +00:00
Kovarththanan Rajaratnam 42b01b61ab Make se_trees static in emem.c
svn path=/trunk/; revision=30008
2009-09-20 09:28:55 +00:00
Kovarththanan Rajaratnam e6f7a87937 Use g_new()
svn path=/trunk/; revision=30005
2009-09-20 09:03:02 +00:00
Kovarththanan Rajaratnam b91827f5a0 Avoid calling emem_create_chunk() needlessly
svn path=/trunk/; revision=29734
2009-09-06 08:10:12 +00:00