projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge pull request #4033 from ntherning/no-stdcall-for-icalls-on-windows-32-bit
[mono.git]
/
mono
/
metadata
/
boehm-gc.c
diff --git
a/mono/metadata/boehm-gc.c
b/mono/metadata/boehm-gc.c
index d3153d29967deb995f5d80da007197e6f7575475..51c5eebb05656a3e9e2373d8c5d5bb2bb7fd11e5 100644
(file)
--- a/
mono/metadata/boehm-gc.c
+++ b/
mono/metadata/boehm-gc.c
@@
-24,6
+24,7
@@
#include <mono/metadata/runtime.h>
#include <mono/metadata/handle.h>
#include <mono/metadata/sgen-toggleref.h>
#include <mono/metadata/runtime.h>
#include <mono/metadata/handle.h>
#include <mono/metadata/sgen-toggleref.h>
+#include <mono/metadata/w32handle.h>
#include <mono/utils/atomic.h>
#include <mono/utils/mono-logger-internals.h>
#include <mono/utils/mono-memory-model.h>
#include <mono/utils/atomic.h>
#include <mono/utils/mono-logger-internals.h>
#include <mono/utils/mono-memory-model.h>
@@
-33,6
+34,7
@@
#include <mono/utils/gc_wrapper.h>
#include <mono/utils/mono-os-mutex.h>
#include <mono/utils/mono-counters.h>
#include <mono/utils/gc_wrapper.h>
#include <mono/utils/mono-os-mutex.h>
#include <mono/utils/mono-counters.h>
+#include <mono/utils/mono-compiler.h>
#if HAVE_BOEHM_GC
#if HAVE_BOEHM_GC
@@
-58,6
+60,8
@@
boehm_thread_register (MonoThreadInfo* info, void *baseptr);
static void
boehm_thread_unregister (MonoThreadInfo *p);
static void
static void
boehm_thread_unregister (MonoThreadInfo *p);
static void
+boehm_thread_detach (MonoThreadInfo *p);
+static void
register_test_toggleref_callback (void);
#define BOEHM_GC_BIT_FINALIZER_AWARE 1
register_test_toggleref_callback (void);
#define BOEHM_GC_BIT_FINALIZER_AWARE 1
@@
-97,6
+101,9
@@
mono_gc_warning (char *msg, GC_word arg)
mono_trace (G_LOG_LEVEL_WARNING, MONO_TRACE_GC, msg, (unsigned long)arg);
}
mono_trace (G_LOG_LEVEL_WARNING, MONO_TRACE_GC, msg, (unsigned long)arg);
}
+static void on_gc_notification (GC_EventType event);
+static void on_gc_heap_resize (size_t new_size);
+
void
mono_gc_base_init (void)
{
void
mono_gc_base_init (void)
{
@@
-109,6
+116,10
@@
mono_gc_base_init (void)
mono_counters_init ();
mono_counters_init ();
+#ifndef HOST_WIN32
+ mono_w32handle_init ();
+#endif
+
/*
* Handle the case when we are called from a thread different from the main thread,
* confusing libgc.
/*
* Handle the case when we are called from a thread different from the main thread,
* confusing libgc.
@@
-236,6
+247,7
@@
mono_gc_base_init (void)
memset (&cb, 0, sizeof (cb));
cb.thread_register = boehm_thread_register;
cb.thread_unregister = boehm_thread_unregister;
memset (&cb, 0, sizeof (cb));
cb.thread_register = boehm_thread_register;
cb.thread_unregister = boehm_thread_unregister;
+ cb.thread_detach = boehm_thread_detach;
cb.mono_method_is_critical = (gboolean (*)(void *))mono_runtime_is_critical_method;
mono_threads_init (&cb, sizeof (MonoThreadInfo));
cb.mono_method_is_critical = (gboolean (*)(void *))mono_runtime_is_critical_method;
mono_threads_init (&cb, sizeof (MonoThreadInfo));
@@
-244,7
+256,8
@@
mono_gc_base_init (void)
mono_thread_info_attach (&dummy);
mono_thread_info_attach (&dummy);
- mono_gc_enable_events ();
+ GC_set_on_collection_event (on_gc_notification);
+ GC_on_heap_resize = on_gc_heap_resize;
MONO_GC_REGISTER_ROOT_FIXED (gc_handles [HANDLE_NORMAL].entries, MONO_ROOT_SOURCE_GC_HANDLE, "gc handles table");
MONO_GC_REGISTER_ROOT_FIXED (gc_handles [HANDLE_PINNED].entries, MONO_ROOT_SOURCE_GC_HANDLE, "gc handles table");
MONO_GC_REGISTER_ROOT_FIXED (gc_handles [HANDLE_NORMAL].entries, MONO_ROOT_SOURCE_GC_HANDLE, "gc handles table");
MONO_GC_REGISTER_ROOT_FIXED (gc_handles [HANDLE_PINNED].entries, MONO_ROOT_SOURCE_GC_HANDLE, "gc handles table");
@@
-406,6
+419,13
@@
boehm_thread_unregister (MonoThreadInfo *p)
mono_threads_add_joinable_thread ((gpointer)tid);
}
mono_threads_add_joinable_thread ((gpointer)tid);
}
+static void
+boehm_thread_detach (MonoThreadInfo *p)
+{
+ if (mono_thread_internal_current_is_attached ())
+ mono_thread_detach_internal (mono_thread_internal_current ());
+}
+
gboolean
mono_object_is_alive (MonoObject* o)
{
gboolean
mono_object_is_alive (MonoObject* o)
{
@@
-509,21
+529,6
@@
on_gc_heap_resize (size_t new_size)
mono_profiler_gc_heap_resize (new_size);
}
mono_profiler_gc_heap_resize (new_size);
}
-void
-mono_gc_enable_events (void)
-{
- GC_set_on_collection_event (on_gc_notification);
- GC_on_heap_resize = on_gc_heap_resize;
-}
-
-static gboolean alloc_events = FALSE;
-
-void
-mono_gc_enable_alloc_events (void)
-{
- alloc_events = TRUE;
-}
-
int
mono_gc_register_root (char *start, size_t size, void *descr, MonoGCRootSource source, const char *msg)
{
int
mono_gc_register_root (char *start, size_t size, void *descr, MonoGCRootSource source, const char *msg)
{
@@
-665,7
+670,7
@@
mono_gc_alloc_obj (MonoVTable *vtable, size_t size)
obj->vtable = vtable;
}
obj->vtable = vtable;
}
- if (G_UNLIKELY (
alloc_events
))
+ if (G_UNLIKELY (
mono_profiler_events & MONO_PROFILE_ALLOCATIONS
))
mono_profiler_allocation (obj);
return obj;
mono_profiler_allocation (obj);
return obj;
@@
-699,7
+704,7
@@
mono_gc_alloc_vector (MonoVTable *vtable, size_t size, uintptr_t max_length)
obj->max_length = max_length;
obj->max_length = max_length;
- if (G_UNLIKELY (
alloc_events
))
+ if (G_UNLIKELY (
mono_profiler_events & MONO_PROFILE_ALLOCATIONS
))
mono_profiler_allocation (&obj->obj);
return obj;
mono_profiler_allocation (&obj->obj);
return obj;
@@
-736,7
+741,7
@@
mono_gc_alloc_array (MonoVTable *vtable, size_t size, uintptr_t max_length, uint
if (bounds_size)
obj->bounds = (MonoArrayBounds *) ((char *) obj + size - bounds_size);
if (bounds_size)
obj->bounds = (MonoArrayBounds *) ((char *) obj + size - bounds_size);
- if (G_UNLIKELY (
alloc_events
))
+ if (G_UNLIKELY (
mono_profiler_events & MONO_PROFILE_ALLOCATIONS
))
mono_profiler_allocation (&obj->obj);
return obj;
mono_profiler_allocation (&obj->obj);
return obj;
@@
-754,7
+759,7
@@
mono_gc_alloc_string (MonoVTable *vtable, size_t size, gint32 len)
obj->length = len;
obj->chars [len] = 0;
obj->length = len;
obj->chars [len] = 0;
- if (G_UNLIKELY (
alloc_events
))
+ if (G_UNLIKELY (
mono_profiler_events & MONO_PROFILE_ALLOCATIONS
))
mono_profiler_allocation (&obj->object);
return obj;
mono_profiler_allocation (&obj->object);
return obj;
@@
-1112,7
+1117,7
@@
create_allocator (int atype, int tls_key, gboolean slowpath)
static MonoMethod* alloc_method_cache [ATYPE_NUM];
static MonoMethod* slowpath_alloc_method_cache [ATYPE_NUM];
static MonoMethod* alloc_method_cache [ATYPE_NUM];
static MonoMethod* slowpath_alloc_method_cache [ATYPE_NUM];
-
static G_GNUC_UNUSED
gboolean
+gboolean
mono_gc_is_critical_method (MonoMethod *method)
{
int i;
mono_gc_is_critical_method (MonoMethod *method)
{
int i;
@@
-1231,7
+1236,7
@@
mono_gc_get_write_barrier (void)
#else
#else
-
static G_GNUC_UNUSED
gboolean
+gboolean
mono_gc_is_critical_method (MonoMethod *method)
{
return FALSE;
mono_gc_is_critical_method (MonoMethod *method)
{
return FALSE;
@@
-1349,11
+1354,6
@@
mono_gc_get_nursery (int *shift_bits, size_t *size)
return NULL;
}
return NULL;
}
-void
-mono_gc_set_current_thread_appdomain (MonoDomain *domain)
-{
-}
-
gboolean
mono_gc_precise_stack_mark_enabled (void)
{
gboolean
mono_gc_precise_stack_mark_enabled (void)
{
@@
-1366,6
+1366,16
@@
mono_gc_get_logfile (void)
return NULL;
}
return NULL;
}
+void
+mono_gc_params_set (const char* options)
+{
+}
+
+void
+mono_gc_debug_set (const char* options)
+{
+}
+
void
mono_gc_conservatively_scan_area (void *start, void *end)
{
void
mono_gc_conservatively_scan_area (void *start, void *end)
{
@@
-1929,8
+1939,6
@@
mono_gchandle_free_domain (MonoDomain *domain)
}
#else
}
#else
- #ifdef _MSC_VER
- // Quiet Visual Studio linker warning, LNK4221, in cases when this source file intentional ends up empty.
- void __mono_win32_boehm_gc_quiet_lnk4221(void) {}
- #endif
+
+MONO_EMPTY_SOURCE_FILE (boehm_gc);
#endif /* no Boehm GC */
#endif /* no Boehm GC */