Re: [PATCH 3/8] Add memory pool library

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Jonathan Nieder
Date: Thursday, July 15, 2010 - 11:57 am

Ramkumar Ramachandra wrote:


Except as a proof of concept, this is the wrong API to have.  The problem
is that the caller cannot choose the filename, so it ends up being a .bin
file in the current directory, wherever that is.

The log message leaves out a subtlety: this also increases the
‘committed’ value, and bookkeeping for that might be useful to some
callers.

In other words:


If you just want something working, I’d suggest stubbing this out:

 static MAYBE_UNUSED void pre##_init(void) \
 { \
 } \

It even almost makes sense as API: the _init function does all
initialization tasks required, which is to say, none.  (The {0, ...}
initializer already has taken care of setting all fields to 0).


This can be simplified

 static MAYBE_UNUSED void pre##_commit(void) \
 { \
	pre##_pool.committed = pre##_pool.size; \
 } \

In other words, maybe something like this on top?  This includes the
vestigal _init() function which really should not be there (it is
confusing that some callers use it and others don’t).  I did not
spend much time on it because in the end I suspect we might throw
obj_pool away anyway.

---
diff --git a/Makefile b/Makefile
index fc31ee0..386a586 100644
--- a/Makefile
+++ b/Makefile
@@ -409,6 +409,7 @@ TEST_PROGRAMS_NEED_X += test-delta
 TEST_PROGRAMS_NEED_X += test-dump-cache-tree
 TEST_PROGRAMS_NEED_X += test-genrandom
 TEST_PROGRAMS_NEED_X += test-match-trees
+TEST_PROGRAMS_NEED_X += test-obj-pool
 TEST_PROGRAMS_NEED_X += test-parse-options
 TEST_PROGRAMS_NEED_X += test-path-utils
 TEST_PROGRAMS_NEED_X += test-run-command
diff --git a/t/t0070-fundamental.sh b/t/t0070-fundamental.sh
index 680d7d6..262f304 100755
--- a/t/t0070-fundamental.sh
+++ b/t/t0070-fundamental.sh
@@ -12,4 +12,10 @@ test_expect_success 'character classes (isspace, isalpha etc.)' '
 	test-ctype
 '
 
+test_expect_success 'allocator for svn importer' '
+	printf "%s\n" 0 0 0 0 0 2 2 2 2 2 -1 >expected &&
+	test-obj-pool >actual &&
+	test_cmp expected actual
+'
+
 test_done
diff --git a/test-obj-pool.c b/test-obj-pool.c
new file mode 100644
index 0000000..1300049
--- /dev/null
+++ b/test-obj-pool.c
@@ -0,0 +1,55 @@
+/*
+ * test-obj-pool.c: code to exercise the svn importer's object pool
+ */
+
+#include "vcs-svn/obj_pool.h"
+
+static const char usage_str[] =
+	"test-obj-pool";
+
+obj_pool_gen(int, int, 2)
+obj_pool_gen(other, int, 4096)
+
+int main(int argc, char *argv[])
+{
+	int *p;
+	int i;
+
+	if (argc != 1) {
+		fprintf(stderr, "Usage: %s\n", usage_str);
+		return 1;
+	}
+
+	int_init();
+
+	p = int_pointer(int_alloc(10));
+	for (i = 0; i < 10; i++)
+		p[i] = 0;
+
+	*other_pointer(other_alloc(1)) = -1;
+	other_commit();
+
+	p = other_pointer(other_alloc(10));
+	for (i = 0; i < 10; i++)
+		p[i] = 1;
+
+	int_free(5);
+
+	p = int_pointer(int_alloc(10));
+	for (i = 0; i < 10; i++)
+		p[i] = 2;
+
+	int_free(5);
+	int_commit();
+
+	for (i = 0; i < int_pool.committed; i++)
+		printf("%d\n", *int_pointer(i));
+
+	for (i = 0; i < other_pool.committed; i++)
+		printf("%d\n", *other_pointer(i));
+
+	int_reset();
+	int_reset();
+	other_reset();
+	return 0;
+}
diff --git a/vcs-svn/obj_pool.h b/vcs-svn/obj_pool.h
index f60c872..90eda15 100644
--- a/vcs-svn/obj_pool.h
+++ b/vcs-svn/obj_pool.h
@@ -16,21 +16,9 @@ static struct { \
 	uint32_t size; \
 	uint32_t capacity; \
 	obj_t *base; \
-	FILE *file; \
-} pre##_pool = { 0, 0, 0, NULL, NULL}; \
+} pre##_pool = {0, 0, 0, NULL}; \
 static MAYBE_UNUSED void pre##_init(void) \
 { \
-	struct stat st; \
-	pre##_pool.file = fopen(#pre ".bin", "a+"); \
-	rewind(pre##_pool.file); \
-	fstat(fileno(pre##_pool.file), &st); \
-	pre##_pool.size = st.st_size / sizeof(obj_t); \
-	pre##_pool.committed = pre##_pool.size; \
-	pre##_pool.capacity = pre##_pool.size * 2; \
-	if (pre##_pool.capacity < initial_capacity) \
-		pre##_pool.capacity = initial_capacity; \
-	pre##_pool.base = malloc(pre##_pool.capacity * sizeof(obj_t)); \
-	fread(pre##_pool.base, sizeof(obj_t), pre##_pool.size, pre##_pool.file); \
 } \
 static MAYBE_UNUSED uint32_t pre##_alloc(uint32_t count) \
 { \
@@ -62,19 +50,15 @@ static MAYBE_UNUSED obj_t *pre##_pointer(uint32_t offset) \
 } \
 static MAYBE_UNUSED void pre##_commit(void) \
 { \
-	pre##_pool.committed += fwrite(pre##_pool.base + pre##_pool.committed, \
-		sizeof(obj_t), pre##_pool.size - pre##_pool.committed, \
-		pre##_pool.file); \
+	pre##_pool.committed = pre##_pool.size; \
 } \
 static MAYBE_UNUSED void pre##_reset(void) \
 { \
 	free(pre##_pool.base); \
-	if (pre##_pool.file) \
-		fclose(pre##_pool.file); \
 	pre##_pool.base = NULL; \
 	pre##_pool.size = 0; \
 	pre##_pool.capacity = 0; \
-	pre##_pool.file = NULL; \
+	pre##_pool.committed = 0; \
 }
 
 #endif
-- 
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0/8] Resurrect rr/svn-export, Ramkumar Ramachandra, (Thu Jul 15, 9:22 am)
[PATCH 1/8] Export parse_date_basic() to convert a date st ..., Ramkumar Ramachandra, (Thu Jul 15, 9:22 am)
[PATCH 2/8] Introduce vcs-svn lib, Ramkumar Ramachandra, (Thu Jul 15, 9:22 am)
[PATCH 3/8] Add memory pool library, Ramkumar Ramachandra, (Thu Jul 15, 9:22 am)
[PATCH 4/8] Add treap implementation, Ramkumar Ramachandra, (Thu Jul 15, 9:23 am)
[PATCH 5/8] Add string-specific memory pool, Ramkumar Ramachandra, (Thu Jul 15, 9:23 am)
[PATCH 6/8] Add stream helper library, Ramkumar Ramachandra, (Thu Jul 15, 9:23 am)
[PATCH 7/8] Add infrastructure to write revisions in fast- ..., Ramkumar Ramachandra, (Thu Jul 15, 9:23 am)
[PATCH 8/8] Add SVN dump parser, Ramkumar Ramachandra, (Thu Jul 15, 9:23 am)
Re: [PATCH 2/8] Introduce vcs-svn lib, Jonathan Nieder, (Thu Jul 15, 10:46 am)
Re: [PATCH 3/8] Add memory pool library, Jonathan Nieder, (Thu Jul 15, 11:57 am)
Re: [PATCH 4/8] Add treap implementation, Jonathan Nieder, (Thu Jul 15, 12:09 pm)
Re: [PATCH 3/8] Add memory pool library, Ramkumar Ramachandra, (Thu Jul 15, 12:12 pm)
Re: [PATCH 2/8] Introduce vcs-svn lib, Ramkumar Ramachandra, (Thu Jul 15, 12:15 pm)
Re: [PATCH 4/8] Add treap implementation, Ramkumar Ramachandra, (Thu Jul 15, 12:18 pm)
Re: [PATCH 6/8] Add stream helper library, Jonathan Nieder, (Thu Jul 15, 12:19 pm)
Re: [PATCH 8/8] Add SVN dump parser, Jonathan Nieder, (Thu Jul 15, 12:52 pm)
Re: [PATCH 8/8] Add SVN dump parser, Jonathan Nieder, (Thu Jul 15, 1:04 pm)
Re: [PATCH 0/8] Resurrect rr/svn-export, Jonathan Nieder, (Fri Jul 16, 3:13 am)
[PATCH 3/9] Add memory pool library, Jonathan Nieder, (Fri Jul 16, 3:16 am)
[PATCH 4/9] Add treap implementation, Jonathan Nieder, (Fri Jul 16, 3:23 am)
Re: [PATCH 4/9] Add treap implementation, Jonathan Nieder, (Fri Jul 16, 11:26 am)
[PATCH 0/10] rr/svn-export reroll, Jonathan Nieder, (Mon Aug 9, 2:57 pm)
[PATCH 02/10] Introduce vcs-svn lib, Jonathan Nieder, (Mon Aug 9, 3:04 pm)
[PATCH 03/10] Add memory pool library, Jonathan Nieder, (Mon Aug 9, 3:11 pm)
[PATCH 04/10] Add treap implementation, Jonathan Nieder, (Mon Aug 9, 3:17 pm)
[PATCH 05/10] Add string-specific memory pool, Jonathan Nieder, (Mon Aug 9, 3:34 pm)
[PATCH 06/10] Add stream helper library, Jonathan Nieder, (Mon Aug 9, 3:39 pm)
[PATCH 08/10] SVN dump parser, Jonathan Nieder, (Mon Aug 9, 3:55 pm)
PATCH 09/10] Update svn-fe manual, Jonathan Nieder, (Mon Aug 9, 3:55 pm)
Re: [PATCH 0/10] rr/svn-export reroll, Ramkumar Ramachandra, (Tue Aug 10, 5:53 am)
Re: [PATCH 0/10] rr/svn-export reroll, Jonathan Nieder, (Tue Aug 10, 6:53 pm)
Re: [PATCH 05/10] Add string-specific memory pool, Junio C Hamano, (Thu Aug 12, 10:22 am)
Re: [PATCH 04/10] Add treap implementation, Junio C Hamano, (Thu Aug 12, 10:22 am)
Re: [PATCH 08/10] SVN dump parser, Junio C Hamano, (Thu Aug 12, 10:22 am)
Re: [PATCH 05/10] Add string-specific memory pool, Jonathan Nieder, (Thu Aug 12, 2:30 pm)
Re: [PATCH 04/10] Add treap implementation, Jonathan Nieder, (Thu Aug 12, 3:02 pm)
Re: [PATCH 04/10] Add treap implementation, Jonathan Nieder, (Thu Aug 12, 3:11 pm)
Re: [PATCH 04/10] Add treap implementation, Junio C Hamano, (Thu Aug 12, 3:44 pm)
[PATCH/WIP 00/16] svn delta applier, Jonathan Nieder, (Sun Oct 10, 7:34 pm)
[PATCH 01/16] vcs-svn: Eliminate global byte_buffer[] array, Jonathan Nieder, (Sun Oct 10, 7:37 pm)
[PATCH 03/16] vcs-svn: Collect line_buffer data in a struct, Jonathan Nieder, (Sun Oct 10, 7:39 pm)
[PATCH 07/16] vcs-svn: Add binary-safe read() function, Jonathan Nieder, (Sun Oct 10, 7:47 pm)
[PATCH 10/16] vcs-svn: Allow character-oriented input, Jonathan Nieder, (Sun Oct 10, 7:52 pm)
[PATCH 13/16] vcs-svn: Learn to check for SVN\0 magic, Jonathan Nieder, (Sun Oct 10, 7:58 pm)
[PATCH 14/16] compat: helper for detecting unsigned overflow, Jonathan Nieder, (Sun Oct 10, 7:59 pm)
[PATCH/RFC 16'/16] vcs-svn: Add svn delta parser, Jonathan Nieder, (Sun Oct 10, 9:01 pm)
[PATCH/RFC 0/11] Building up the delta parser, Jonathan Nieder, (Wed Oct 13, 2:17 am)
[PATCH 02/11] vcs-svn: Skeleton of an svn delta parser, Jonathan Nieder, (Wed Oct 13, 2:21 am)
[PATCH 04/11] vcs-svn: Read inline data from deltas, Jonathan Nieder, (Wed Oct 13, 2:35 am)
[PATCH 05/11] vcs-svn: Read instructions from deltas, Jonathan Nieder, (Wed Oct 13, 2:38 am)
[PATCH 07/11] vcs-svn: Check declared number of output bytes, Jonathan Nieder, (Wed Oct 13, 2:41 am)
[PATCH 09/11] vcs-svn: Let deltas use data from postimage, Jonathan Nieder, (Wed Oct 13, 2:50 am)
[PATCH 11/11] vcs-svn: Allow deltas to copy from preimage, Jonathan Nieder, (Wed Oct 13, 2:58 am)
[PATCH 11/11] vcs-svn: Allow deltas to copy from preimage, Jonathan Nieder, (Wed Oct 13, 3:00 am)
Re: [PATCH/RFC 0/11] Building up the delta parser, Ramkumar Ramachandra, (Mon Oct 18, 10:00 am)
Re: [PATCH/RFC 0/11] Building up the delta parser, Jonathan Nieder, (Mon Oct 18, 10:03 am)