Skip to content
Prev Previous commit
Next Next commit
Fixed bug with double init.
  • Loading branch information
Nathan Ricci committed May 25, 2022
commit 87f1e790879664d41fbd4f4be167252de51b6bbe
2 changes: 1 addition & 1 deletion src/mono/mono/metadata/marshal-ilgen.c
Original file line number Diff line number Diff line change
Expand Up @@ -2722,7 +2722,7 @@ get_marshal_cb (void)
#ifdef ENABLE_ILGEN
mono_marshal_ilgen_init ();
#else
mono_marshal_noilgen_init ();
mono_marshal_noilgen_init_heavyweight ();
#endif
}
return &ilgen_marshal_cb;
Expand Down
5 changes: 4 additions & 1 deletion src/mono/mono/metadata/marshal-ilgen.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ void
mono_marshal_ilgen_init (void);
#else
void
mono_marshal_noilgen_init (void);
mono_marshal_noilgen_init_heavyweight (void);

void
mono_marshal_noilgen_init_lightweight (void);
#endif

int
Expand Down
1 change: 1 addition & 0 deletions src/mono/mono/metadata/marshal-lightweight.c
Original file line number Diff line number Diff line change
Expand Up @@ -3119,5 +3119,6 @@ mono_marshal_lightweight_init (void)
#ifdef DISABLE_NONBLITTABLE
mono_marshal_noilgen_init_blittable (&cb);
#endif
printf("!!!naricc_debug!!!: mono_marshal_lightweight_init\n");
mono_install_marshal_callbacks (&cb);
}
3 changes: 0 additions & 3 deletions src/mono/mono/metadata/marshal-lightweight.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,4 @@
MONO_API void
mono_marshal_lightweight_init (void);

MONO_API gboolean
mono_marshal_lightweight_cb_is_inited(void);

#endif // __MONO_MARSHAL_LIGHTWEIGHT_H__
20 changes: 17 additions & 3 deletions src/mono/mono/metadata/marshal-noilgen.c
Original file line number Diff line number Diff line change
Expand Up @@ -365,10 +365,9 @@ emit_native_wrapper_noilgen (MonoImage *image, MonoMethodBuilder *mb, MonoMethod
}

void
mono_marshal_noilgen_init (void)
mono_marshal_noilgen_init_lightweight (void)
{
MonoMarshalLightweightCallbacks lightweight_cb;
MonoMarshalIlgenCallbacks ilgen_cb;

lightweight_cb.version = MONO_MARSHAL_CALLBACKS_VERSION;
lightweight_cb.emit_marshal_scalar = emit_marshal_scalar_noilgen;
Expand Down Expand Up @@ -402,8 +401,17 @@ mono_marshal_noilgen_init (void)
lightweight_cb.mb_emit_exception_for_error = mb_emit_exception_for_error_noilgen;
lightweight_cb.emit_marshal_directive_exception = emit_marshal_directive_exception_noilgen;
lightweight_cb.mb_emit_byte = mb_emit_byte_noilgen;

printf("!!!naricc_debug!!! mono_marshal_noilgen_init\n");
mono_install_marshal_callbacks (&lightweight_cb);

}

void
mono_marshal_noilgen_init_heavyweight (void)
{
MonoMarshalIlgenCallbacks ilgen_cb;

ilgen_cb.version = MONO_MARSHAL_CALLBACKS_VERSION;
ilgen_cb.emit_marshal_array = emit_marshal_array_noilgen;
ilgen_cb.emit_marshal_vtype = emit_marshal_vtype_noilgen;
Expand All @@ -420,9 +428,15 @@ mono_marshal_noilgen_init (void)
ilgen_cb.emit_marshal_char = emit_marshal_char_noilgen;
mono_install_marshal_callbacks_ilgen(&ilgen_cb);
}

#else
void
mono_marshal_noilgen_init (void)
mono_marshal_noilgen_init_lightweight (void)
{
}

void
mono_marshal_noilgen_init_heavyweight (void)
{
}
#endif
Expand Down
24 changes: 6 additions & 18 deletions src/mono/mono/metadata/marshal.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ MONO_PRAGMA_WARNING_POP()
#include "metadata/method-builder.h"
#include "metadata/method-builder-internals.h"
#include "metadata/tabledefs.h"
#include "mono/mini/mini-arch.h"
#include <mono/metadata/exception.h>
#include <mono/metadata/appdomain.h>
#include "mono/metadata/abi-details.h"
Expand Down Expand Up @@ -6176,22 +6175,11 @@ static gboolean lightweight_cb_inited = FALSE;
void
mono_install_marshal_callbacks (MonoMarshalLightweightCallbacks *cb)
{
#ifdef HOST_WASM
mono_wasm_print_stack_trace ();
#endif

if(!lightweight_cb_inited) {
g_assert (!lightweight_cb_inited);
g_assert (cb->version == MONO_MARSHAL_CALLBACKS_VERSION);
memcpy (&marshal_lightweight_cb, cb, sizeof (MonoMarshalLightweightCallbacks));
lightweight_cb_inited = TRUE;
}
}

gboolean
mono_marshal_lightweight_cb_is_inited (void)
{
return lightweight_cb_inited;
printf("!!!naricc_debug!!!: mono_install_marshal_callbacks\n");
g_assert (!lightweight_cb_inited);
g_assert (cb->version == MONO_MARSHAL_CALLBACKS_VERSION);
memcpy (&marshal_lightweight_cb, cb, sizeof (MonoMarshalLightweightCallbacks));
lightweight_cb_inited = TRUE;
}

static MonoMarshalLightweightCallbacks *
Expand All @@ -6202,7 +6190,7 @@ get_marshal_cb (void)
#ifdef ENABLE_ILGEN
mono_marshal_lightweight_init ();
#else
mono_marshal_noilgen_init ();
mono_marshal_noilgen_init_lightweight ();
#endif
}

Expand Down
6 changes: 1 addition & 5 deletions src/mono/wasm/runtime/driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ void mono_wasm_deregister_root (char *addr);

void mono_ee_interp_init (const char *opts);
void mono_marshal_lightweight_init (void);
mono_bool mono_marshal_lightweight_cb_is_inited (void);
void mono_method_builder_ilgen_init (void);
void mono_sgen_mono_ilgen_init (void);
void mono_icall_table_init (void);
Expand Down Expand Up @@ -569,10 +568,7 @@ mono_wasm_load_runtime (const char *unused, int debug_level)
#ifdef NEED_INTERP
mono_ee_interp_init (interp_opts);

if(!mono_marshal_lightweight_cb_is_inited())
{
mono_marshal_lightweight_init ();
}
mono_marshal_lightweight_init ();

mono_method_builder_ilgen_init ();
mono_sgen_mono_ilgen_init ();
Expand Down