aboutsummaryrefslogtreecommitdiff
path: root/src/rt
diff options
context:
space:
mode:
authorMichael Bebenita <[email protected]>2010-07-27 23:10:31 -0700
committerGraydon Hoare <[email protected]>2010-07-28 20:30:28 -0700
commit6afb6c767ed3274359bcac5af5a11851922e3668 (patch)
tree090572a274b2c860878863c725bfe93ffad48d52 /src/rt
parentLog a separator when logging switches between threads. (diff)
downloadrust-6afb6c767ed3274359bcac5af5a11851922e3668.tar.xz
rust-6afb6c767ed3274359bcac5af5a11851922e3668.zip
Move allocation-tracking into rust_srv.
Diffstat (limited to 'src/rt')
-rw-r--r--src/rt/rust.cpp21
-rw-r--r--src/rt/rust.h3
2 files changed, 14 insertions, 10 deletions
diff --git a/src/rt/rust.cpp b/src/rt/rust.cpp
index 00e709c9..37398655 100644
--- a/src/rt/rust.cpp
+++ b/src/rt/rust.cpp
@@ -1,13 +1,12 @@
#include "rust_internal.h"
-#include "util/array_list.h"
-// #define TRACK_ALLOCATIONS
+#define TRACK_ALLOCATIONS
// For debugging, keeps track of live allocations, so you can find out
// exactly what leaked.
-#ifdef TRACK_ALLOCATIONS
-array_list<void *> allocation_list;
-#endif
+//#ifdef TRACK_ALLOCATIONS
+//array_list<void *> allocation_list;
+//#endif
rust_srv::rust_srv() :
live_allocs(0)
@@ -70,16 +69,18 @@ rust_srv::realloc(void *p, size_t bytes)
void
rust_srv::free(void *p)
{
- if (live_allocs < 1) {
- fatal("live_allocs < 1", __FILE__, __LINE__);
- }
- live_allocs--;
- ::free(p);
#ifdef TRACK_ALLOCATIONS
if (allocation_list.replace(p, NULL) == NULL) {
+ printf("ptr 0x%" PRIxPTR " is not in allocation_list\n",
+ (uintptr_t) p);
fatal("not in allocation_list", __FILE__, __LINE__);
}
#endif
+ if (live_allocs < 1) {
+ fatal("live_allocs < 1", __FILE__, __LINE__);
+ }
+ live_allocs--;
+ ::free(p);
}
void
diff --git a/src/rt/rust.h b/src/rt/rust.h
index 135a1799..c65d0eb1 100644
--- a/src/rt/rust.h
+++ b/src/rt/rust.h
@@ -17,8 +17,11 @@
#define CDECL
#endif
+#include "util/array_list.h"
+
struct rust_srv {
size_t live_allocs;
+ array_list<void *> allocation_list;
virtual void log(char const *);
virtual void fatal(char const *, char const *, size_t);