Skip to content

Commit cb7cf1e

Browse files
committed
FIX: not freeing ROOT_BOOT if it is already NONE.. adding some memory related traces
1 parent 52e2a8f commit cb7cf1e

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

src/core/b-init.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -1052,7 +1052,8 @@ static void Set_Option_File(REBCNT field, REBYTE* src, REBOOL dir )
10521052
Free_Series(VAL_SERIES(ROOT_ERROBJ));
10531053
Free_Series(VAL_SERIES(ROOT_STRINGS));
10541054
Free_Series(VAL_SERIES(ROOT_TYPESETS));
1055-
Free_Series(VAL_SERIES(ROOT_BOOT));
1055+
if (!IS_NONE(ROOT_BOOT))
1056+
Free_Series(VAL_SERIES(ROOT_BOOT));
10561057
Free_Series(VAL_SERIES(TASK_STACK));
10571058
Free_Series(VAL_SERIES(TASK_BUF_EMIT));
10581059
Free_Series(VAL_SERIES(TASK_BUF_WORDS));

src/core/m-pools.c

+39-2
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,9 @@ const REBPOOLSPEC Mem_Pool_Spec[MAX_POOLS] =
273273
if (!pool->first) Fill_Pool(pool);
274274
node = pool->first;
275275
pool->first = *node;
276+
#ifdef WATCH_SERIES_POOL
277+
printf(cs_cast("*** SERIES_POOL Make_Node=> has: %u free: %u\n"), Mem_Pools[SERIES_POOL].has, Mem_Pools[SERIES_POOL].free);
278+
#endif
276279
pool->free--;
277280
return (void *)node;
278281
}
@@ -290,6 +293,14 @@ const REBPOOLSPEC Mem_Pool_Spec[MAX_POOLS] =
290293
*node = Mem_Pools[pool_id].first;
291294
Mem_Pools[pool_id].first = node;
292295
Mem_Pools[pool_id].free++;
296+
#ifdef WATCH_SERIES_POOL
297+
if(pool_id == SERIES_POOL) {
298+
//if(Mem_Pools[SERIES_POOL].has == Mem_Pools[SERIES_POOL].free) {
299+
// puts("last?");
300+
//}
301+
printf(cs_cast("*** SERIES_POOL Free_Node=> has: %u free: %u\n"), Mem_Pools[SERIES_POOL].has, Mem_Pools[SERIES_POOL].free);
302+
}
303+
#endif
293304
}
294305

295306

@@ -320,6 +331,9 @@ const REBPOOLSPEC Mem_Pool_Spec[MAX_POOLS] =
320331
pool->first = *node;
321332
pool->free--;
322333
length = pool->wide;
334+
#ifdef WATCH_SERIES_POOL
335+
if(pool_num == SERIES_POOL) printf(cs_cast("*** SERIES_POOL Make_Series_Data=> has: %u free: %u (size: %u)\n"), Mem_Pools[SERIES_POOL].has, Mem_Pools[SERIES_POOL].free, length);
336+
#endif
323337
} else {
324338
length = ALIGN(length, 2048);
325339
#ifdef DEBUGGING
@@ -338,6 +352,9 @@ const REBPOOLSPEC Mem_Pool_Spec[MAX_POOLS] =
338352
#endif
339353
Mem_Pools[SYSTEM_POOL].has += length;
340354
Mem_Pools[SYSTEM_POOL].free++;
355+
#ifdef WATCH_SYSTEM_POOL
356+
printf(cs_cast("*** SYSTEM_POOL Make_Series_Data=> has: %u free: %u (size: %u)\n"), Mem_Pools[SYSTEM_POOL].has, Mem_Pools[SYSTEM_POOL].free, length);
357+
#endif
341358
}
342359
#ifdef CHAFF
343360
memset((REBYTE *)node, 0xff, length);
@@ -387,6 +404,9 @@ const REBPOOLSPEC Mem_Pool_Spec[MAX_POOLS] =
387404
pool->free--;
388405
length = pool->wide;
389406
memset(node, 0, length);
407+
#ifdef WATCH_SERIES_POOL
408+
if(pool_num == SERIES_POOL) printf(cs_cast("*** SERIES_POOL Make_Series=> has: %u free: %u (size: %u)\n"), Mem_Pools[SERIES_POOL].has, Mem_Pools[SERIES_POOL].free, length);
409+
#endif
390410
} else {
391411
if (powerof2) {
392412
// !!! WHO added this and why??? Just use a left shift and mask!
@@ -415,6 +435,9 @@ const REBPOOLSPEC Mem_Pool_Spec[MAX_POOLS] =
415435
#endif
416436
Mem_Pools[SYSTEM_POOL].has += length;
417437
Mem_Pools[SYSTEM_POOL].free++;
438+
#ifdef WATCH_SYSTEM_POOL
439+
printf(cs_cast("*** SYSTEM_POOL Make_Series => has: %u free: %u (size: %u)\n"), Mem_Pools[SYSTEM_POOL].has, Mem_Pools[SYSTEM_POOL].free, length);
440+
#endif
418441
}
419442
#ifdef CHAFF
420443
memset((REBYTE *)node, 0xff, length);
@@ -487,6 +510,9 @@ const REBPOOLSPEC Mem_Pool_Spec[MAX_POOLS] =
487510
*node = pool->first;
488511
pool->first = node;
489512
pool->free++;
513+
#ifdef WATCH_SERIES_POOL
514+
if(pool_num == SERIES_POOL) printf(cs_cast("*** SERIES_POOL Free_Series_Data=> has: %u free: %u (size: %u)\n"), Mem_Pools[SERIES_POOL].has, Mem_Pools[SERIES_POOL].free, size);
515+
#endif
490516
} else {
491517
#ifdef MUNGWALL
492518
Free_Mem(((REBYTE *)node)-MUNG_SIZE, size + MUNG_SIZE*2);
@@ -495,6 +521,9 @@ const REBPOOLSPEC Mem_Pool_Spec[MAX_POOLS] =
495521
#endif
496522
Mem_Pools[SYSTEM_POOL].has -= size;
497523
Mem_Pools[SYSTEM_POOL].free--;
524+
#ifdef WATCH_SYSTEM_POOL
525+
printf(cs_cast("*** SYSTEM_POOL Free_Series_Data=> has: %u free: %u (size: %u)\n"), Mem_Pools[SYSTEM_POOL].has, Mem_Pools[SYSTEM_POOL].free, size);
526+
#endif
498527
}
499528

500529
CHECK_MEMORY(2);
@@ -516,7 +545,11 @@ const REBPOOLSPEC Mem_Pool_Spec[MAX_POOLS] =
516545
***********************************************************************/
517546
{
518547
REBCNT n;
519-
548+
#ifdef WATCH_SERIES_POOL
549+
if (SERIES_FREED(series)) {
550+
puts("series already free!");
551+
}
552+
#endif
520553
PG_Reb_Stats->Series_Freed++;
521554
PG_Reb_Stats->Series_Memory -= SERIES_TOTAL(series);
522555

@@ -923,6 +956,7 @@ const REBPOOLSPEC Mem_Pool_Spec[MAX_POOLS] =
923956
//Dump_Series_In_Pool(-1);
924957

925958
FOREACH(n, SYSTEM_POOL) {
959+
//printf(cs_cast("*** Dispose_Pools[%u] Has: %u free: %u\n"), n, Mem_Pools[n].has, Mem_Pools[n].free);
926960
if (Mem_Pools[n].has == Mem_Pools[n].free) {
927961
seg = Mem_Pools[n].segs;
928962
while (seg) {
@@ -932,9 +966,12 @@ const REBPOOLSPEC Mem_Pool_Spec[MAX_POOLS] =
932966
}
933967
}
934968
else {
935-
//printf(cb_cast("Mem_Pool[%u] not empty! Has: %u free: %u\n"), n, Mem_Pools[n].has, Mem_Pools[n].free);
969+
printf(cs_cast("!!! Mem_Pools[%u] not empty! Has: %u free: %u\n"), n, Mem_Pools[n].has, Mem_Pools[n].free);
936970
}
937971
}
972+
// SYSTEM_POOL contains not system series sizes (big series), at this state it should be empty!
973+
if (Mem_Pools[SYSTEM_POOL].has > 0)
974+
printf(cs_cast("!!! Mem_Pools[SYSTEM_POOL].has: %u\n"), Mem_Pools[SYSTEM_POOL].has);
938975
Free_Mem(Mem_Pools, 0);
939976
Free_Mem(PG_Pool_Map, 0);
940977
}

0 commit comments

Comments
 (0)