projects
/
ardour.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Parse information from harvid independent from the locale
[ardour.git]
/
libs
/
pbd
/
reallocpool.cc
diff --git
a/libs/pbd/reallocpool.cc
b/libs/pbd/reallocpool.cc
index 529e34a2159c4046e3f5a2070f978bb8291c6266..0bf37f35179f4b620488e11b8e4c0c1a50925cc4 100644
(file)
--- a/
libs/pbd/reallocpool.cc
+++ b/
libs/pbd/reallocpool.cc
@@
-18,6
+18,7
@@
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
+#include <cstdio>
#ifndef PLATFORM_WINDOWS
#include <sys/mman.h>
#ifndef PLATFORM_WINDOWS
#include <sys/mman.h>
@@
-25,14
+26,13
@@
#include "pbd/reallocpool.h"
#include "pbd/reallocpool.h"
-#if defined RAP_WITH_SEGMENT_STATS || defined RAP_WITH_CALL_STATS
-#include <cstdio>
-#endif
-
#ifdef RAP_WITH_SEGMENT_STATS
#ifdef RAP_WITH_SEGMENT_STATS
+#include <assert.h>
#define STATS_segment collect_segment_stats();
#define STATS_segment collect_segment_stats();
+#define ASSERT assert
#else
#define STATS_segment
#else
#define STATS_segment
+#define ASSERT
#endif
#ifdef RAP_WITH_CALL_STATS
#endif
#ifdef RAP_WITH_CALL_STATS
@@
-109,6
+109,8
@@
ReallocPool::~ReallocPool ()
void *
ReallocPool::_realloc (void *ptr, size_t oldsize, size_t newsize) {
void *rv = NULL;
void *
ReallocPool::_realloc (void *ptr, size_t oldsize, size_t newsize) {
void *rv = NULL;
+ ASSERT (!ptr || oldsize <= _asize (ptr));
+ oldsize = _asize (ptr); // ignore provided oldsize
if (ptr == 0 && newsize == 0) {
STATS_inc(_n_noop);
if (ptr == 0 && newsize == 0) {
STATS_inc(_n_noop);
@@
-133,6
+135,7
@@
ReallocPool::_realloc (void *ptr, size_t oldsize, size_t newsize) {
}
if (newsize == oldsize) {
}
if (newsize == oldsize) {
+ ASSERT (_asize (ptr) <= newsize);
STATS_inc(_n_noop);
return ptr;
}
STATS_inc(_n_noop);
return ptr;
}
@@
-148,7
+151,9
@@
ReallocPool::_realloc (void *ptr, size_t oldsize, size_t newsize) {
if ((rv = _malloc (newsize))) {
memcpy (rv, ptr, oldsize);
}
if ((rv = _malloc (newsize))) {
memcpy (rv, ptr, oldsize);
}
- _free (ptr);
+ if (rv) {
+ _free (ptr);
+ }
STATS_if(!rv, _n_oom);
STATS_inc(_n_grow);
STATS_hist(_hist_grow, newsize);
STATS_if(!rv, _n_oom);
STATS_inc(_n_grow);
STATS_hist(_hist_grow, newsize);
@@
-157,6
+162,7
@@
ReallocPool::_realloc (void *ptr, size_t oldsize, size_t newsize) {
}
if (newsize < oldsize) {
}
if (newsize < oldsize) {
+ ASSERT (_asize (ptr) >= newsize);
#if 0 // re-allocate
if ((rv = _malloc (newsize))) {
memccpy (rv, ptr, newsize);
#if 0 // re-allocate
if ((rv = _malloc (newsize))) {
memccpy (rv, ptr, newsize);
@@
-208,6
+214,7
@@
ReallocPool::_malloc (size_t s) {
#endif
while (1) { // iterates at most once over the available pool
#endif
while (1) { // iterates at most once over the available pool
+ ASSERT (SEGSIZ != 0);
while (SEGSIZ > 0) {
traversed += SEGSIZ + sop;
if (traversed >= _poolsize) {
while (SEGSIZ > 0) {
traversed += SEGSIZ + sop;
if (traversed >= _poolsize) {
@@
-337,6
+344,9
@@
ReallocPool::dumpsegments ()
const poolsize_t sop = sizeof(poolsize_t);
poolsize_t *in = (poolsize_t*) p;
unsigned int traversed = 0;
const poolsize_t sop = sizeof(poolsize_t);
poolsize_t *in = (poolsize_t*) p;
unsigned int traversed = 0;
+#ifdef RAP_WITH_CALL_STATS
+ size_t used = 0;
+#endif
printf ("<<<<< %s\n", _name.c_str());
while (1) {
if ((*in) > 0) {
printf ("<<<<< %s\n", _name.c_str());
while (1) {
if ((*in) > 0) {
@@
-344,6
+354,9
@@
ReallocPool::dumpsegments ()
printf ("0x%08x data %p\n", traversed + sop , p + sop);
traversed += *in + sop;
p += *in + sop;
printf ("0x%08x data %p\n", traversed + sop , p + sop);
traversed += *in + sop;
p += *in + sop;
+#ifdef RAP_WITH_CALL_STATS
+ used += *in;
+#endif
} else if ((*in) < 0) {
printf ("0x%08x free %4d [+%d]\n", traversed, -*in, sop);
traversed += -*in + sop;
} else if ((*in) < 0) {
printf ("0x%08x free %4d [+%d]\n", traversed, -*in, sop);
traversed += -*in + sop;
@@
-362,6
+375,9
@@
ReallocPool::dumpsegments ()
break;
}
}
break;
}
}
+#ifdef RAP_WITH_CALL_STATS
+ ASSERT (_cur_used == used);
+#endif
printf (">>>>>\n");
}
printf (">>>>>\n");
}