[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Debugging case refs
From: |
John Darrington |
Subject: |
Re: Debugging case refs |
Date: |
Tue, 26 Oct 2010 15:14:17 +0000 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
Looks ok to me. I've not tried it.
Let's check it in and see.....
On Tue, Oct 26, 2010 at 07:35:53AM -0700, Ben Pfaff wrote:
John Darrington <address@hidden> writes:
> On Mon, Oct 25, 2010 at 09:57:47PM -0700, Ben Pfaff wrote:
>
> From: Ben Pfaff <address@hidden>
> Date: Mon, 25 Oct 2010 21:56:48 -0700
> Subject: [PATCH] case: Add support for debugging case reference
count leaks.
>
> -static inline struct ccase *case_ref (const struct ccase *);
> +struct ccase *case_ref (const struct ccase *);
>
> I think it's important that the case_ref function has the
WARN_UNUSED_RESULT flag.
> When DEBUG_CASEREFS=1, simply calling case_ref (c) without assigning the
result
> will not copy the case.
Good point, thanks.
Here's the same patch with that one change:
--8<--------------------------cut here-------------------------->8--
From: Ben Pfaff <address@hidden>
Date: Tue, 26 Oct 2010 07:34:45 -0700
Subject: [PATCH] case: Add support for debugging case reference count
leaks.
---
src/data/case.c | 23 ++++++++++++++++++++++-
src/data/case.h | 14 ++------------
2 files changed, 24 insertions(+), 13 deletions(-)
diff --git a/src/data/case.c b/src/data/case.c
index dc40292..ffb47fe 100644
--- a/src/data/case.c
+++ b/src/data/case.c
@@ -1,5 +1,5 @@
/* PSPP - a program for statistical analysis.
- Copyright (C) 2004, 2007, 2009 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2007, 2009, 2010 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -30,6 +30,14 @@
#include "minmax.h"
#include "xalloc.h"
+/* Set this flag to 1 to copy cases instead of ref counting them.
+ This is sometimes helpful in debugging situations. */
+#define DEBUG_CASEREFS 0
+
+#if DEBUG_CASEREFS
+#warning "Caseref debug enabled. CASES ARE NOT BEING SHARED!!"
+#endif
+
static size_t case_size (const struct caseproto *);
static bool variable_matches_case (const struct ccase *,
const struct variable *);
@@ -80,6 +88,19 @@ case_clone (const struct ccase *c)
return case_unshare (case_ref (c));
}
+/* Increments case C's reference count and returns C. Afterward,
+ case C is shared among its reference count holders. */
+struct ccase *
+case_ref (const struct ccase *c_)
+{
+ struct ccase *c = CONST_CAST (struct ccase *, c_);
+ c->ref_cnt++;
+#if DEBUG_CASEREFS
+ c = case_unshare__ (c);
+#endif
+ return c;
+}
+
/* Returns an estimate of the number of bytes of memory that
would be consumed in creating a case based on PROTO. The
estimate includes typical overhead from malloc() in addition
diff --git a/src/data/case.h b/src/data/case.h
index d00c2ad..c07b07d 100644
--- a/src/data/case.h
+++ b/src/data/case.h
@@ -1,5 +1,5 @@
/* PSPP - a program for statistical analysis.
- Copyright (C) 2004, 2007, 2009 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2007, 2009, 2010 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -61,7 +61,7 @@ struct ccase *case_try_create (const struct caseproto *)
MALLOC_LIKE;
struct ccase *case_clone (const struct ccase *) MALLOC_LIKE;
static inline struct ccase *case_unshare (struct ccase *)
WARN_UNUSED_RESULT;
-static inline struct ccase *case_ref (const struct ccase *);
+struct ccase *case_ref (const struct ccase *) WARN_UNUSED_RESULT;
static inline void case_unref (struct ccase *);
static inline bool case_is_shared (const struct ccase *);
@@ -130,16 +130,6 @@ case_unshare (struct ccase *c)
return c;
}
-/* Increments case C's reference count and returns C. Afterward,
- case C is shared among its reference count holders. */
-static inline struct ccase *
-case_ref (const struct ccase *c_)
-{
- struct ccase *c = CONST_CAST (struct ccase *, c_);
- c->ref_cnt++;
- return c;
-}
-
/* Decrements case C's reference count. Frees C if its
reference count drops to 0.
--
Ben Pfaff
http://benpfaff.org
--
PGP Public key ID: 1024D/2DE827B3
fingerprint = 8797 A26D 0854 2EAB 0285 A290 8A67 719C 2DE8 27B3
See http://pgp.mit.edu or any PGP keyserver for public key.
signature.asc
Description: Digital signature
- Debugging case refs, John Darrington, 2010/10/03
- Re: Debugging case refs, Ben Pfaff, 2010/10/04
- Re: Debugging case refs, John Darrington, 2010/10/22
- Re: Debugging case refs, Ben Pfaff, 2010/10/25
- Re: Debugging case refs, Ben Pfaff, 2010/10/26
- Re: Debugging case refs, John Darrington, 2010/10/26
- Re: Debugging case refs, Ben Pfaff, 2010/10/26
- Re: Debugging case refs,
John Darrington <=
- Re: Debugging case refs, Ben Pfaff, 2010/10/27