From: Lai Jiangshan <laijs@cn.fujitsu.com>
To: xen-devel@lists.xen.org
Cc: Keir Fraser <keir.fraser@citrix.com>,
Ian Jackson <ian.jackson@eu.citrix.com>,
Ian Campbell <ian.campbell@citrix.com>,
Lai Jiangshan <laijs@cn.fujitsu.com>
Subject: [PATCH 3/5] libxl: add @count to libxl_gc
Date: Tue, 11 Mar 2014 22:15:23 +0800 [thread overview]
Message-ID: <1394547325-18537-3-git-send-email-laijs@cn.fujitsu.com> (raw)
In-Reply-To: <1394547325-18537-1-git-send-email-laijs@cn.fujitsu.com>
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
---
tools/libxl/libxl_internal.c | 22 ++++++++--------------
tools/libxl/libxl_internal.h | 2 ++
2 files changed, 10 insertions(+), 14 deletions(-)
diff --git a/tools/libxl/libxl_internal.c b/tools/libxl/libxl_internal.c
index 1db48b6..a79d841 100644
--- a/tools/libxl/libxl_internal.c
+++ b/tools/libxl/libxl_internal.c
@@ -32,8 +32,6 @@ void libxl__alloc_failed(libxl_ctx *ctx, const char *func,
void libxl__ptr_add(libxl__gc *gc, void *ptr)
{
- int i;
-
if (!libxl__gc_is_real(gc))
return;
@@ -41,22 +39,17 @@ void libxl__ptr_add(libxl__gc *gc, void *ptr)
return;
/* fast case: we have space in the array for storing the pointer */
- for (i = 0; i < gc->alloc_maxsize; i++) {
- if (!gc->alloc_ptrs[i]) {
- gc->alloc_ptrs[i] = ptr;
- return;
- }
- }
+ if (gc->count < gc->alloc_maxsize)
+ gc->alloc_ptrs[gc->count++] = ptr;
+
int new_maxsize = gc->alloc_maxsize * 2 + 25;
assert(new_maxsize < INT_MAX / sizeof(void*) / 2);
gc->alloc_ptrs = realloc(gc->alloc_ptrs, new_maxsize * sizeof(void *));
if (!gc->alloc_ptrs)
libxl__alloc_failed(CTX, __func__, new_maxsize, sizeof(void*));
- gc->alloc_ptrs[gc->alloc_maxsize++] = ptr;
-
- while (gc->alloc_maxsize < new_maxsize)
- gc->alloc_ptrs[gc->alloc_maxsize++] = 0;
+ gc->alloc_ptrs[gc->count++] = ptr;
+ gc->alloc_maxsize = new_maxsize;
return;
}
@@ -68,7 +61,7 @@ void libxl__free_all(libxl__gc *gc)
assert(libxl__gc_is_real(gc));
- for (i = 0; i < gc->alloc_maxsize; i++) {
+ for (i = 0; i < gc->count; i++) {
ptr = gc->alloc_ptrs[i];
gc->alloc_ptrs[i] = NULL;
free(ptr);
@@ -76,6 +69,7 @@ void libxl__free_all(libxl__gc *gc)
free(gc->alloc_ptrs);
gc->alloc_ptrs = 0;
gc->alloc_maxsize = 0;
+ gc->count = 0;
}
void *libxl__zalloc(libxl__gc *gc, int bytes)
@@ -107,7 +101,7 @@ void *libxl__realloc(libxl__gc *gc, void *ptr, size_t new_size)
if (ptr == NULL) {
libxl__ptr_add(gc, new_ptr);
} else if (new_ptr != ptr && libxl__gc_is_real(gc)) {
- for (i = 0; i < gc->alloc_maxsize; i++) {
+ for (i = 0; i < gc->count; i++) {
if (gc->alloc_ptrs[i] == ptr) {
gc->alloc_ptrs[i] = new_ptr;
break;
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 1bd23ff..d2100d8 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -294,6 +294,7 @@ struct libxl__poller {
struct libxl__gc {
/* mini-GC */
+ int count;
int alloc_maxsize; /* -1 means this is the dummy non-gc gc */
void **alloc_ptrs;
libxl_ctx *owner;
@@ -438,6 +439,7 @@ struct libxl__ao {
};
#define LIBXL_INIT_GC(gc,ctx) do{ \
+ (gc).count = 0; \
(gc).alloc_maxsize = 0; \
(gc).alloc_ptrs = 0; \
(gc).owner = (ctx); \
--
1.7.1
next prev parent reply other threads:[~2014-03-11 14:15 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-11 14:15 [PATCH 1/5] libxl, gc: fix memory leak in libxl__strndup() Lai Jiangshan
2014-03-11 14:15 ` [PATCH 2/5] libxl: simplify libxl__dirname() Lai Jiangshan
2014-03-13 16:51 ` Ian Jackson
2014-03-11 14:15 ` Lai Jiangshan [this message]
2014-03-13 16:52 ` [PATCH 3/5] libxl: add @count to libxl_gc Ian Jackson
2014-03-11 14:15 ` [PATCH 4/5] xc_save: avoid to alloc local constant string Lai Jiangshan
2014-03-13 16:55 ` Ian Jackson
2014-03-11 14:15 ` [PATCH 5/5] xc_save: simplify switch_qemu_logdirty() by use stack strings Lai Jiangshan
2014-03-13 16:54 ` Ian Jackson
2014-03-14 9:21 ` Lai Jiangshan
2014-03-13 16:50 ` [PATCH 1/5] libxl, gc: fix memory leak in libxl__strndup() Ian Jackson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1394547325-18537-3-git-send-email-laijs@cn.fujitsu.com \
--to=laijs@cn.fujitsu.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=keir.fraser@citrix.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).