Skip to content

replace gc_disable with an argument to gc_enable #11647

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 10, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions base/base.jl
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,7 @@ end
finalize(o::ANY) = ccall(:jl_finalize, Void, (Any,), o)

gc(full::Bool=true) = ccall(:jl_gc_collect, Void, (Cint,), full)
gc_enable() = ccall(:jl_gc_enable, Cint, ())!=0
gc_disable() = ccall(:jl_gc_disable, Cint, ())!=0
gc_enable(on::Bool) = ccall(:jl_gc_enable, Cint, (Cint,), on)!=0

bytestring(str::ByteString) = str

Expand Down
3 changes: 3 additions & 0 deletions base/deprecated.jl
Original file line number Diff line number Diff line change
Expand Up @@ -514,3 +514,6 @@ function read!(from::AbstractIOBuffer, p::Ptr, nb::Int)
end
p
end

@deprecate gc_enable() gc_enable(true)
@deprecate gc_disable() gc_enable(false)
1 change: 0 additions & 1 deletion base/exports.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1098,7 +1098,6 @@ export
finalizer,
finalize,
gc,
gc_disable,
gc_enable,
precompile,

Expand Down
12 changes: 5 additions & 7 deletions doc/stdlib/base.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1009,15 +1009,13 @@ Internals

Perform garbage collection. This should not generally be used.

.. function:: gc_disable()
.. function:: gc_enable(on::Bool)

Disable garbage collection. This should be used only with extreme
caution, as it can cause memory use to grow without bound.
Control whether garbage collection is enabled using a boolean argument (true for
enabled, false for disabled).
Returns previous GC state.

.. function:: gc_enable()

Re-enable garbage collection after calling :func:`gc_disable`. Returns previous GC state.
Disabling garbage collection should be used only with extreme caution,
as it can cause memory use to grow without bound.

.. function:: macroexpand(x)

Expand Down
5 changes: 2 additions & 3 deletions src/ast.c
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,7 @@ static jl_value_t *full_list_of_lists(value_t e, int expronly)
static jl_value_t *scm_to_julia(value_t e, int expronly)
{
#ifdef JL_GC_MARKSWEEP
int en = jl_gc_is_enabled();
jl_gc_disable();
int en = jl_gc_enable(0);
#endif
jl_value_t *v;
JL_TRY {
Expand All @@ -212,7 +211,7 @@ static jl_value_t *scm_to_julia(value_t e, int expronly)
v = (jl_value_t*)ex;
}
#ifdef JL_GC_MARKSWEEP
if (en) jl_gc_enable();
jl_gc_enable(en);
#endif
return v;
}
Expand Down
38 changes: 14 additions & 24 deletions src/dump.c
Original file line number Diff line number Diff line change
Expand Up @@ -1428,8 +1428,7 @@ void jl_save_system_image_to_stream(ios_t *f)
{
jl_gc_collect(1);
jl_gc_collect(0);
int en = jl_gc_is_enabled();
jl_gc_disable();
int en = jl_gc_enable(0);
htable_reset(&backref_table, 250000);
arraylist_new(&reinit_list, 0);

Expand Down Expand Up @@ -1474,7 +1473,7 @@ void jl_save_system_image_to_stream(ios_t *f)
htable_reset(&backref_table, 0);
arraylist_free(&reinit_list);

if (en) jl_gc_enable();
jl_gc_enable(en);
}

DLLEXPORT void jl_save_system_image(const char *fname)
Expand Down Expand Up @@ -1533,8 +1532,7 @@ DLLEXPORT void jl_preload_sysimg_so(const char *fname)
void jl_restore_system_image_from_stream(ios_t *f)
{
#ifdef JL_GC_MARKSWEEP
int en = jl_gc_is_enabled();
jl_gc_disable();
int en = jl_gc_enable(0);
#endif
DUMP_MODES last_mode = mode;
mode = MODE_SYSTEM_IMAGE;
Expand Down Expand Up @@ -1603,7 +1601,7 @@ void jl_restore_system_image_from_stream(ios_t *f)
arraylist_free(&backref_list);

#ifdef JL_GC_MARKSWEEP
if (en) jl_gc_enable();
jl_gc_enable(en);
#endif
mode = last_mode;
jl_update_all_fptrs();
Expand Down Expand Up @@ -1667,11 +1665,9 @@ jl_value_t *jl_ast_rettype(jl_lambda_info_t *li, jl_value_t *ast)
ios_mem(&src, 0);
ios_setbuf(&src, (char*)bytes->data, jl_array_len(bytes), 0);
src.size = jl_array_len(bytes);
int en = jl_gc_is_enabled();
jl_gc_disable();
int en = jl_gc_enable(0);
jl_value_t *rt = jl_deserialize_value(&src, NULL);
if (en)
jl_gc_enable();
jl_gc_enable(en);
tree_literal_values = NULL;
mode = last_mode;
return rt;
Expand All @@ -1685,8 +1681,7 @@ jl_value_t *jl_compress_ast(jl_lambda_info_t *li, jl_value_t *ast)
ios_t dest;
ios_mem(&dest, 0);
jl_array_t *last_tlv = tree_literal_values;
int en = jl_gc_is_enabled();
jl_gc_disable();
int en = jl_gc_enable(0);

if (li->module->constant_table == NULL) {
li->module->constant_table = jl_alloc_cell_1d(0);
Expand All @@ -1707,8 +1702,7 @@ jl_value_t *jl_compress_ast(jl_lambda_info_t *li, jl_value_t *ast)
li->module->constant_table = NULL;
}
tree_literal_values = last_tlv;
if (en)
jl_gc_enable();
jl_gc_enable(en);
mode = last_mode;
return v;
}
Expand All @@ -1724,12 +1718,10 @@ jl_value_t *jl_uncompress_ast(jl_lambda_info_t *li, jl_value_t *data)
ios_mem(&src, 0);
ios_setbuf(&src, (char*)bytes->data, jl_array_len(bytes), 0);
src.size = jl_array_len(bytes);
int en = jl_gc_is_enabled();
jl_gc_disable();
int en = jl_gc_enable(0);
(void)jl_deserialize_value(&src, NULL); // skip ret type
jl_value_t *v = jl_deserialize_value(&src, NULL);
if (en)
jl_gc_enable();
jl_gc_enable(en);
tree_literal_values = NULL;
mode = last_mode;
return v;
Expand All @@ -1749,8 +1741,7 @@ int jl_save_new_module(const char *fname, jl_module_t *mod)
htable_new(&backref_table, 5000);
ptrhash_put(&backref_table, jl_main_module, (void*)(uintptr_t)0);

int en = jl_gc_is_enabled();
jl_gc_disable();
int en = jl_gc_enable(0);
DUMP_MODES last_mode = mode;
mode = MODE_MODULE;
jl_serialize_value(&f, mod->parent);
Expand All @@ -1773,7 +1764,7 @@ int jl_save_new_module(const char *fname, jl_module_t *mod)

jl_current_module = lastmod;
mode = last_mode;
if (en) jl_gc_enable();
jl_gc_enable(en);

htable_reset(&backref_table, 0);
ios_close(&f);
Expand Down Expand Up @@ -1805,8 +1796,7 @@ jl_module_t *jl_restore_new_module(const char *fname)
arraylist_new(&flagref_list, 0);
arraylist_new(&methtable_list, 0);

int en = jl_gc_is_enabled();
jl_gc_disable();
int en = jl_gc_enable(0);
DUMP_MODES last_mode = mode;
mode = MODE_MODULE;
jl_module_t *parent = (jl_module_t*)jl_deserialize_value(&f, NULL);
Expand Down Expand Up @@ -1913,7 +1903,7 @@ jl_module_t *jl_restore_new_module(const char *fname)
}

mode = last_mode;
if (en) jl_gc_enable();
jl_gc_enable(en);
arraylist_free(&flagref_list);
arraylist_free(&methtable_list);
arraylist_free(&backref_list);
Expand Down
10 changes: 2 additions & 8 deletions src/gc.c
Original file line number Diff line number Diff line change
Expand Up @@ -2085,16 +2085,10 @@ static void gc_verify(void)
// collector entry point and control

static int is_gc_enabled = 1;
DLLEXPORT int jl_gc_enable(void)
DLLEXPORT int jl_gc_enable(int on)
{
int prev = is_gc_enabled;
is_gc_enabled = 1;
return prev;
}
DLLEXPORT int jl_gc_disable(void)
{
int prev = is_gc_enabled;
is_gc_enabled = 0;
is_gc_enabled = (on!=0);
return prev;
}
DLLEXPORT int jl_gc_is_enabled(void) { return is_gc_enabled; }
Expand Down
4 changes: 2 additions & 2 deletions src/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1060,7 +1060,7 @@ void _julia_init(JL_IMAGE_SEARCH rel)

#ifdef JL_GC_MARKSWEEP
jl_gc_init();
jl_gc_disable();
jl_gc_enable(0);
#endif
jl_init_frontend();
jl_init_types();
Expand Down Expand Up @@ -1132,7 +1132,7 @@ void _julia_init(JL_IMAGE_SEARCH rel)
jl_install_default_signal_handlers();

#ifdef JL_GC_MARKSWEEP
jl_gc_enable();
jl_gc_enable(1);
#endif

if (jl_options.image_file)
Expand Down
6 changes: 2 additions & 4 deletions src/julia.h
Original file line number Diff line number Diff line change
Expand Up @@ -542,8 +542,7 @@ extern DLLEXPORT JL_THREAD jl_gcframe_t *jl_pgcstack;

void jl_gc_init(void);
void jl_gc_setmark(jl_value_t *v);
DLLEXPORT int jl_gc_enable(void);
DLLEXPORT int jl_gc_disable(void);
DLLEXPORT int jl_gc_enable(int on);
DLLEXPORT int jl_gc_is_enabled(void);
DLLEXPORT int64_t jl_gc_total_bytes(void);
DLLEXPORT uint64_t jl_gc_total_hrtime(void);
Expand Down Expand Up @@ -634,8 +633,7 @@ DLLEXPORT void jl_gc_add_finalizer(jl_value_t *v, jl_function_t *f);
int64_t diff_gc_total_bytes(void);
#define sync_gc_total_bytes()
#define jl_gc_collect(arg);
#define jl_gc_enable() (0)
#define jl_gc_disable() (0)
#define jl_gc_enable(on) (0)
#define jl_gc_is_enabled() (0)
#define jl_gc_track_malloced_array(a)
#define jl_gc_count_allocd(sz)
Expand Down