74
74
CORE_SetLOGFILE(stderr, 0/*false*/);
75
75
for (j = 1; j <= 3; j++) {
76
g_NCBI_ConnectRandomSeed = (int) time(0) + NCBI_CONNECT_SRAND_ADDEND;
76
g_NCBI_ConnectRandomSeed = (int) time(0) ^ NCBI_CONNECT_SRAND_ADDEND;
77
77
srand(g_NCBI_ConnectRandomSeed);
78
78
CORE_LOGF(eLOG_Note, ("Creating heap %d", j));
79
79
if (!(heap = HEAP_Create(0, 0, 4096, s_Expand, 0)))
80
80
CORE_LOG(eLOG_Error, "Cannot create heap");
81
while (rand() != 12345) {
81
for (n = 0; n < 1000 && (rand() & 0xFFFF) != 0x1234; n++) {
83
83
if (r == 1 || r == 3) {
86
CORE_LOGF(eLOG_Note, ("Allocating %d bytes", i));
86
CORE_LOGF(eLOG_Note, ("Allocating %d data byte(s)", i));
87
87
if (!(blk = HEAP_Alloc(heap, i)))
88
88
CORE_LOG(eLOG_Error, "Allocation failed");
103
103
} while (rand() & 0x7);
104
104
if (blk && (short) blk->flag) {
105
unsigned data_size = blk->size - sizeof(*blk);
105
106
CORE_LOGF(eLOG_Note,
106
("Deleting block #%d, size %u", i,
107
(unsigned) (blk->size - sizeof(*blk))));
107
("Deleting block #%d, data size %u", i,
108
110
HEAP_Free(heap, blk);
109
111
CORE_LOG(eLOG_Note, "Done");
114
116
CORE_LOG(eLOG_Note, "Walking the heap");
116
blk = HEAP_Walk(heap, blk);
119
("Block #%d (%s), size %u", ++i,
120
(short) blk->flag ? "used" : "free",
121
(unsigned) (blk->size - sizeof(*blk))));
117
while ((blk = HEAP_Walk(heap, blk)) != 0) {
118
unsigned data_size = blk->size - sizeof(*blk);
120
("Block #%d (%s), data size %u", ++i,
121
(short) blk->flag ? "used" : "free",
123
125
CORE_LOGF(eLOG_Note,
124
126
("Total of %d block%s", i, i == 1 ? "" : "s"));
125
127
} else if (r == 6 || r == 7) {
129
newheap = HEAP_Attach(/* HACK! */*((char**)heap));
131
newheap = HEAP_Attach(HEAP_Base(heap), 0);
131
newheap = HEAP_Copy(heap);
133
newheap = HEAP_Copy(heap, 0, 0);
134
136
CORE_LOGF(eLOG_Error, ("%s failed",
135
137
r == 6 ? "Attach" : "Copy"));
138
141
CORE_LOGF(eLOG_Note, ("Walking %s heap",
139
142
r == 6 ? "attached" : "copied"));
141
blk = HEAP_Walk(newheap, blk);
144
("Block #%d (%s), size %u", ++i,
145
(short) blk->flag ? "used" : "free",
146
(unsigned) (blk->size - sizeof(*blk))));
143
while ((blk = HEAP_Walk(newheap, blk)) != 0) {
144
unsigned data_size = blk->size - sizeof(*blk);
146
("Block #%d (%s), data size %u", ++i,
147
(short) blk->flag ? "used" : "free",
148
151
CORE_LOGF(eLOG_Note,
149
152
("Total of %d block%s", i, i == 1 ? "" : "s"));
150
153
HEAP_Detach(newheap);
152
155
TNCBI_Size size = HEAP_Size(heap);
153
CORE_LOGF(eLOG_Note, ("Heap trimmed: %u -> %u",
156
HEAP newheap = HEAP_Trim(heap);
157
CORE_LOGF(eLOG_Note, ("Heap %strimmed: %u -> %u",
158
newheap ? "" : "NOT ",
155
(unsigned) HEAP_Trim(heap)));
160
(unsigned) HEAP_Size(newheap)));
158
165
HEAP_Destroy(heap);
159
166
CORE_LOGF(eLOG_Note, ("Heap %d done", j));
161
168
CORE_LOG(eLOG_Note, "Test completed");