• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <assert.h>
4 
5 #include "../smalloc.h"
6 #include "../flist.h"
7 
8 FILE *f_err;
9 struct timeval *fio_tv = NULL;
10 unsigned int fio_debug = 0;
11 
12 #define MAGIC1	0xa9b1c8d2
13 #define MAGIC2	0xf0a1e9b3
14 
15 #define LOOPS	32
16 
17 struct elem {
18 	unsigned int magic1;
19 	struct flist_head list;
20 	unsigned int magic2;
21 };
22 
23 FLIST_HEAD(list);
24 
do_rand_allocs(void)25 static int do_rand_allocs(void)
26 {
27 	unsigned int size, nr, rounds = 0;
28 	unsigned long total;
29 	struct elem *e;
30 
31 	while (rounds++ < LOOPS) {
32 #ifdef STEST_SEED
33 		srand(MAGIC1);
34 #endif
35 		nr = total = 0;
36 		while (total < 128*1024*1024UL) {
37 			size = 8 * sizeof(struct elem) + (int) (999.0 * (rand() / (RAND_MAX + 1.0)));
38 			e = smalloc(size);
39 			if (!e) {
40 				printf("fail at %lu, size %u\n", total, size);
41 				break;
42 			}
43 			e->magic1 = MAGIC1;
44 			e->magic2 = MAGIC2;
45 			total += size;
46 			flist_add_tail(&e->list, &list);
47 			nr++;
48 		}
49 
50 		printf("Got items: %u\n", nr);
51 
52 		while (!flist_empty(&list)) {
53 			e = flist_entry(list.next, struct elem, list);
54 			assert(e->magic1 == MAGIC1);
55 			assert(e->magic2 == MAGIC2);
56 			flist_del(&e->list);
57 			sfree(e);
58 		}
59 	}
60 
61 	return 0;
62 }
63 
do_specific_alloc(unsigned long size)64 static int do_specific_alloc(unsigned long size)
65 {
66 	void *ptr;
67 
68 	ptr = smalloc(size);
69 	sfree(ptr);
70 	return 0;
71 }
72 
main(int argc,char * argv[])73 int main(int argc, char *argv[])
74 {
75 	f_err = stderr;
76 
77 	sinit();
78 
79 	do_rand_allocs();
80 
81 	/* smalloc bug, commit 271067a6 */
82 	do_specific_alloc(671386584);
83 
84 	scleanup();
85 	return 0;
86 }
87 
__dprint(int type,const char * str,...)88 void __dprint(int type, const char *str, ...)
89 {
90 }
91