Skip to content

Commit 7c05f0f

Browse files
Diogo C Nettod-netto
authored andcommitted
re-add lazy sweep on 32bit
1 parent 0fcbd10 commit 7c05f0f

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

src/gc-pages.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,6 @@ NOINLINE jl_gc_pagemeta_t *jl_gc_alloc_page(void) JL_NOTSAFEPOINT
129129
}
130130
// must map a new set of pages
131131
char *data = jl_gc_try_alloc_pages();
132-
if (data == NULL) {
133-
jl_throw(jl_memory_exception);
134-
}
135132
meta = (jl_gc_pagemeta_t*)malloc_s(block_pg_cnt * sizeof(jl_gc_pagemeta_t));
136133
for (int i = 0; i < block_pg_cnt; i++) {
137134
jl_gc_pagemeta_t *pg = &meta[i];

src/gc.c

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1232,10 +1232,7 @@ static NOINLINE jl_taggedvalue_t *gc_add_page(jl_gc_pool_t *p) JL_NOTSAFEPOINT
12321232
// Do not pass in `ptls` as argument. This slows down the fast path
12331233
// in pool_alloc significantly
12341234
jl_ptls_t ptls = jl_current_task->ptls;
1235-
jl_gc_pagemeta_t *pg = pop_page_metadata_back(&ptls->page_metadata_lazily_freed);
1236-
if (pg == NULL) {
1237-
pg = jl_gc_alloc_page();
1238-
}
1235+
jl_gc_pagemeta_t *pg = jl_gc_alloc_page();
12391236
pg->osize = p->osize;
12401237
pg->thread_n = ptls->tid;
12411238
set_page_metadata(pg);
@@ -1292,8 +1289,20 @@ STATIC_INLINE jl_value_t *jl_gc_pool_alloc_inner(jl_ptls_t ptls, int pool_offset
12921289
assert(pg->osize == p->osize);
12931290
pg->nfree = 0;
12941291
pg->has_young = 1;
1292+
pg = pop_page_metadata_back(&ptls->page_metadata_lazily_freed);
1293+
if (pg != NULL) {
1294+
v = gc_reset_page(ptls, p, pg);
1295+
pg->osize = p->osize;
1296+
push_page_metadata_back(&ptls->page_metadata_allocd, pg);
1297+
}
1298+
else {
1299+
v = NULL;
1300+
}
1301+
}
1302+
// Not an else!!
1303+
if (v == NULL) {
1304+
v = gc_add_page(p);
12951305
}
1296-
v = gc_add_page(p);
12971306
next = (jl_taggedvalue_t*)((char*)v + osize);
12981307
}
12991308
p->newpages = next;
@@ -1352,12 +1361,10 @@ static jl_taggedvalue_t **gc_sweep_page(jl_gc_pool_t *p, jl_gc_pagemeta_t **allo
13521361
// the eager one uses less memory.
13531362
// FIXME - need to do accounting on a per-thread basis
13541363
// on quick sweeps, keep a few pages empty but allocated for performance
1355-
#ifdef _P64 // TODO: re-enable this on `_P32`?
13561364
if (!sweep_full && lazy_freed_pages <= default_collect_interval / GC_PAGE_SZ) {
13571365
lazy_freed_pages++;
13581366
freed_lazily = 1;
13591367
}
1360-
#endif
13611368
nfree = (GC_PAGE_SZ - GC_PAGE_OFFSET) / osize;
13621369
goto done;
13631370
}

0 commit comments

Comments
 (0)