From e5dbc21b10516e90d0d138d4b25a6625fd2c2f55 Mon Sep 17 00:00:00 2001 From: Benjamin Lorenz Date: Thu, 18 Jan 2024 14:49:37 +0100 Subject: [PATCH] type conversion: protect some more julia variables from intermediate garbage collections --- deps/src/caller.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deps/src/caller.cpp b/deps/src/caller.cpp index b034923a9..bf58f2aae 100644 --- a/deps/src/caller.cpp +++ b/deps/src/caller.cpp @@ -237,11 +237,13 @@ bool translate_singular_type(jl_value_t * obj, void ** args, int * argtypes, int jl_value_t * get_julia_type_from_sleftv(leftv ret) { jl_array_t * result = jl_alloc_array_1d(jl_array_any_type, 3); + JL_GC_PUSH1(&result); jl_array_ptr_set(result, 0, jl_false); jl_array_ptr_set(result, 1, jl_box_voidpointer(ret->data)); ret->data = 0; jl_array_ptr_set(result, 2, jl_box_int64(ret->Typ())); ret->rtyp = 0; + JL_GC_POP(); return reinterpret_cast(result); } @@ -353,7 +355,7 @@ jl_value_t * lookup_singular_library_symbol_wo_rng(std::string pack, std::string int err = 2; jl_value_t * res = jl_nothing; jl_array_t * answer = jl_alloc_array_1d(jl_array_any_type, 2); - JL_GC_PUSH1(&answer); + JL_GC_PUSH2(&answer, &res); leftv u = (leftv)IDROOT->get(pack.c_str(), 0); if (u != NULL) {