You've already forked linux-packaging-mono
Imported Upstream version 4.4.0.40
Former-commit-id: 6427cc082e74df30afc535fd906a3494b74b0817
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
#include <mono/io-layer/wapi-private.h>
|
||||
#include <mono/io-layer/io-trace.h>
|
||||
#include <mono/utils/mono-logger-internals.h>
|
||||
#include <mono/utils/mono-time.h>
|
||||
|
||||
static gboolean own_if_signalled(gpointer handle)
|
||||
{
|
||||
@@ -88,6 +89,7 @@ guint32 WaitForSingleObjectEx(gpointer handle, guint32 timeout,
|
||||
int thr_ret;
|
||||
gboolean apc_pending = FALSE;
|
||||
gpointer current_thread = wapi_get_current_thread_handle ();
|
||||
gint64 now, end;
|
||||
|
||||
if (current_thread == NULL) {
|
||||
SetLastError (ERROR_INVALID_HANDLE);
|
||||
@@ -157,6 +159,9 @@ guint32 WaitForSingleObjectEx(gpointer handle, guint32 timeout,
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (timeout != INFINITE)
|
||||
end = mono_100ns_ticks () + timeout * 1000 * 10;
|
||||
|
||||
do {
|
||||
/* Check before waiting on the condition, just in case
|
||||
*/
|
||||
@@ -170,7 +175,17 @@ guint32 WaitForSingleObjectEx(gpointer handle, guint32 timeout,
|
||||
goto done;
|
||||
}
|
||||
|
||||
waited = _wapi_handle_timedwait_signal_handle (handle, timeout, alertable, FALSE, &apc_pending);
|
||||
if (timeout == INFINITE) {
|
||||
waited = _wapi_handle_timedwait_signal_handle (handle, INFINITE, alertable, FALSE, &apc_pending);
|
||||
} else {
|
||||
now = mono_100ns_ticks ();
|
||||
if (end < now) {
|
||||
ret = WAIT_TIMEOUT;
|
||||
goto done;
|
||||
}
|
||||
|
||||
waited = _wapi_handle_timedwait_signal_handle (handle, (end - now) / 10 / 1000, alertable, FALSE, &apc_pending);
|
||||
}
|
||||
|
||||
if(waited==0 && !apc_pending) {
|
||||
/* Condition was signalled, so hopefully
|
||||
@@ -253,6 +268,7 @@ guint32 SignalObjectAndWait(gpointer signal_handle, gpointer wait,
|
||||
int thr_ret;
|
||||
gboolean apc_pending = FALSE;
|
||||
gpointer current_thread = wapi_get_current_thread_handle ();
|
||||
gint64 now, end;
|
||||
|
||||
if (current_thread == NULL) {
|
||||
SetLastError (ERROR_INVALID_HANDLE);
|
||||
@@ -327,6 +343,9 @@ guint32 SignalObjectAndWait(gpointer signal_handle, gpointer wait,
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (timeout != INFINITE)
|
||||
end = mono_100ns_ticks () + timeout * 1000 * 10;
|
||||
|
||||
do {
|
||||
/* Check before waiting on the condition, just in case
|
||||
*/
|
||||
@@ -339,7 +358,17 @@ guint32 SignalObjectAndWait(gpointer signal_handle, gpointer wait,
|
||||
goto done;
|
||||
}
|
||||
|
||||
waited = _wapi_handle_timedwait_signal_handle (wait, timeout, alertable, FALSE, &apc_pending);
|
||||
if (timeout == INFINITE) {
|
||||
waited = _wapi_handle_timedwait_signal_handle (wait, INFINITE, alertable, FALSE, &apc_pending);
|
||||
} else {
|
||||
now = mono_100ns_ticks ();
|
||||
if (end < now) {
|
||||
ret = WAIT_TIMEOUT;
|
||||
goto done;
|
||||
}
|
||||
|
||||
waited = _wapi_handle_timedwait_signal_handle (wait, (end - now) / 10 / 1000, alertable, FALSE, &apc_pending);
|
||||
}
|
||||
|
||||
if (waited==0 && !apc_pending) {
|
||||
/* Condition was signalled, so hopefully
|
||||
@@ -445,6 +474,7 @@ guint32 WaitForMultipleObjectsEx(guint32 numobjects, gpointer *handles,
|
||||
gboolean poll;
|
||||
gpointer sorted_handles [MAXIMUM_WAIT_OBJECTS];
|
||||
gboolean apc_pending = FALSE;
|
||||
gint64 now, end;
|
||||
|
||||
if (current_thread == NULL) {
|
||||
SetLastError (ERROR_INVALID_HANDLE);
|
||||
@@ -528,6 +558,10 @@ guint32 WaitForMultipleObjectsEx(guint32 numobjects, gpointer *handles,
|
||||
if (timeout == 0) {
|
||||
return WAIT_TIMEOUT;
|
||||
}
|
||||
|
||||
if (timeout != INFINITE)
|
||||
end = mono_100ns_ticks () + timeout * 1000 * 10;
|
||||
|
||||
/* Have to wait for some or all handles to become signalled
|
||||
*/
|
||||
|
||||
@@ -571,7 +605,16 @@ guint32 WaitForMultipleObjectsEx(guint32 numobjects, gpointer *handles,
|
||||
|
||||
if (!done) {
|
||||
/* Enter the wait */
|
||||
ret = _wapi_handle_timedwait_signal (timeout, poll, &apc_pending);
|
||||
if (timeout == INFINITE) {
|
||||
ret = _wapi_handle_timedwait_signal (INFINITE, poll, &apc_pending);
|
||||
} else {
|
||||
now = mono_100ns_ticks ();
|
||||
if (end < now) {
|
||||
ret = WAIT_TIMEOUT;
|
||||
} else {
|
||||
ret = _wapi_handle_timedwait_signal ((end - now) / 10 / 1000, poll, &apc_pending);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* No need to wait */
|
||||
ret = 0;
|
||||
|
||||
@@ -1046,7 +1046,8 @@ do_mono_image_load (MonoImage *image, MonoImageOpenStatus *status,
|
||||
}
|
||||
}
|
||||
if (!image->loader) {
|
||||
*status = MONO_IMAGE_IMAGE_INVALID;
|
||||
if (status)
|
||||
*status = MONO_IMAGE_IMAGE_INVALID;
|
||||
goto invalid_image;
|
||||
}
|
||||
|
||||
|
||||
@@ -601,7 +601,7 @@ jit_info_table_add (MonoDomain *domain, MonoJitInfoTable *volatile *table_ptr, M
|
||||
*table_ptr = new_table;
|
||||
mono_memory_barrier ();
|
||||
domain->num_jit_info_tables++;
|
||||
mono_thread_hazardous_free_or_queue (table, (MonoHazardousFreeFunc)mono_jit_info_table_free, TRUE, FALSE);
|
||||
mono_thread_hazardous_free_or_queue (table, (MonoHazardousFreeFunc)mono_jit_info_table_free, HAZARD_FREE_MAY_LOCK, HAZARD_FREE_SAFE_CTX);
|
||||
table = new_table;
|
||||
|
||||
goto restart;
|
||||
@@ -677,7 +677,7 @@ mono_jit_info_free_or_queue (MonoDomain *domain, MonoJitInfo *ji)
|
||||
if (domain->num_jit_info_tables <= 1) {
|
||||
/* Can it actually happen that we only have one table
|
||||
but ji is still hazardous? */
|
||||
mono_thread_hazardous_free_or_queue (ji, g_free, TRUE, FALSE);
|
||||
mono_thread_hazardous_free_or_queue (ji, g_free, HAZARD_FREE_MAY_LOCK, HAZARD_FREE_SAFE_CTX);
|
||||
} else {
|
||||
domain->jit_info_free_queue = g_slist_prepend (domain->jit_info_free_queue, ji);
|
||||
}
|
||||
|
||||
@@ -57,11 +57,10 @@ ves_icall_System_Diagnostics_Process_GetPid_internal (void)
|
||||
return mono_process_current_pid ();
|
||||
}
|
||||
|
||||
void ves_icall_System_Diagnostics_Process_Process_free_internal (MonoObject *this_obj,
|
||||
HANDLE process)
|
||||
void ves_icall_System_Diagnostics_Process_Process_free_internal (HANDLE process)
|
||||
{
|
||||
#ifdef THREAD_DEBUG
|
||||
g_message ("%s: Closing process %p, handle %p", __func__, this_obj, process);
|
||||
g_message ("%s: Closing process handle %p", __func__, process);
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_WIN32) || defined(HOST_WIN32)
|
||||
|
||||
@@ -60,7 +60,7 @@ G_BEGIN_DECLS
|
||||
HANDLE ves_icall_System_Diagnostics_Process_GetProcess_internal (guint32 pid);
|
||||
MonoArray *ves_icall_System_Diagnostics_Process_GetProcesses_internal (void);
|
||||
guint32 ves_icall_System_Diagnostics_Process_GetPid_internal (void);
|
||||
void ves_icall_System_Diagnostics_Process_Process_free_internal (MonoObject *this_obj, HANDLE process);
|
||||
void ves_icall_System_Diagnostics_Process_Process_free_internal (HANDLE process);
|
||||
MonoArray *ves_icall_System_Diagnostics_Process_GetModules_internal (MonoObject *this_obj, HANDLE process);
|
||||
void ves_icall_System_Diagnostics_FileVersionInfo_GetVersionInfo_internal (MonoObject *this_obj, MonoString *filename);
|
||||
MonoBoolean ves_icall_System_Diagnostics_Process_ShellExecuteEx_internal (MonoProcessStartInfo *proc_start_info, MonoProcInfo *process_handle);
|
||||
|
||||
@@ -2338,8 +2338,6 @@ mono_gc_scan_object (void *obj, void *gc_data)
|
||||
void
|
||||
sgen_client_scan_thread_data (void *start_nursery, void *end_nursery, gboolean precise, ScanCopyContext ctx)
|
||||
{
|
||||
SgenThreadInfo *info;
|
||||
|
||||
scan_area_arg_start = start_nursery;
|
||||
scan_area_arg_end = end_nursery;
|
||||
|
||||
@@ -2393,7 +2391,7 @@ sgen_client_scan_thread_data (void *start_nursery, void *end_nursery, gboolean p
|
||||
}
|
||||
}
|
||||
}
|
||||
} END_FOREACH_THREAD
|
||||
} FOREACH_THREAD_END
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -112,12 +112,11 @@ sgen_thread_handshake (BOOL suspend)
|
||||
{
|
||||
SgenThreadInfo *cur_thread = mono_thread_info_current ();
|
||||
kern_return_t ret;
|
||||
SgenThreadInfo *info;
|
||||
|
||||
int count = 0;
|
||||
|
||||
cur_thread->client_info.suspend_done = TRUE;
|
||||
FOREACH_THREAD_SAFE (info) {
|
||||
FOREACH_THREAD (info) {
|
||||
if (info == cur_thread || sgen_thread_pool_is_thread_pool_thread (mono_thread_info_get_tid (info)))
|
||||
continue;
|
||||
|
||||
@@ -134,7 +133,7 @@ sgen_thread_handshake (BOOL suspend)
|
||||
continue;
|
||||
}
|
||||
count ++;
|
||||
} END_FOREACH_THREAD_SAFE
|
||||
} FOREACH_THREAD_END
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
@@ -197,14 +197,13 @@ int
|
||||
sgen_thread_handshake (BOOL suspend)
|
||||
{
|
||||
int count, result;
|
||||
SgenThreadInfo *info;
|
||||
int signum = suspend ? suspend_signal_num : restart_signal_num;
|
||||
|
||||
MonoNativeThreadId me = mono_native_thread_id_get ();
|
||||
|
||||
count = 0;
|
||||
mono_thread_info_current ()->client_info.suspend_done = TRUE;
|
||||
FOREACH_THREAD_SAFE (info) {
|
||||
FOREACH_THREAD (info) {
|
||||
if (mono_native_thread_id_equals (mono_thread_info_get_tid (info), me)) {
|
||||
continue;
|
||||
}
|
||||
@@ -219,7 +218,7 @@ sgen_thread_handshake (BOOL suspend)
|
||||
} else {
|
||||
info->client_info.skip = 1;
|
||||
}
|
||||
} END_FOREACH_THREAD_SAFE
|
||||
} FOREACH_THREAD_END
|
||||
|
||||
sgen_wait_for_suspend_ack (count);
|
||||
|
||||
|
||||
@@ -123,12 +123,11 @@ sgen_wait_for_suspend_ack (int count)
|
||||
int
|
||||
sgen_thread_handshake (BOOL suspend)
|
||||
{
|
||||
SgenThreadInfo *info;
|
||||
SgenThreadInfo *current = mono_thread_info_current ();
|
||||
int count = 0;
|
||||
|
||||
current->client_info.suspend_done = TRUE;
|
||||
FOREACH_THREAD_SAFE (info) {
|
||||
FOREACH_THREAD (info) {
|
||||
if (info == current)
|
||||
continue;
|
||||
info->client_info.suspend_done = FALSE;
|
||||
@@ -142,7 +141,7 @@ sgen_thread_handshake (BOOL suspend)
|
||||
continue;
|
||||
}
|
||||
++count;
|
||||
} END_FOREACH_THREAD_SAFE
|
||||
} FOREACH_THREAD_END
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
@@ -113,7 +113,6 @@ is_ip_in_managed_allocator (MonoDomain *domain, gpointer ip)
|
||||
static int
|
||||
restart_threads_until_none_in_managed_allocator (void)
|
||||
{
|
||||
SgenThreadInfo *info;
|
||||
int num_threads_died = 0;
|
||||
int sleep_duration = -1;
|
||||
|
||||
@@ -121,7 +120,7 @@ restart_threads_until_none_in_managed_allocator (void)
|
||||
int restart_count = 0, restarted_count = 0;
|
||||
/* restart all threads that stopped in the
|
||||
allocator */
|
||||
FOREACH_THREAD_SAFE (info) {
|
||||
FOREACH_THREAD (info) {
|
||||
gboolean result;
|
||||
if (info->client_info.skip || info->client_info.gc_disabled || info->client_info.suspend_done)
|
||||
continue;
|
||||
@@ -146,7 +145,7 @@ restart_threads_until_none_in_managed_allocator (void)
|
||||
info->client_info.stopped_domain = NULL;
|
||||
info->client_info.suspend_done = TRUE;
|
||||
}
|
||||
} END_FOREACH_THREAD_SAFE
|
||||
} FOREACH_THREAD_END
|
||||
/* if no threads were restarted, we're done */
|
||||
if (restart_count == 0)
|
||||
break;
|
||||
@@ -174,7 +173,7 @@ restart_threads_until_none_in_managed_allocator (void)
|
||||
} else {
|
||||
info->client_info.skip = 1;
|
||||
}
|
||||
} END_FOREACH_THREAD
|
||||
} FOREACH_THREAD_END
|
||||
/* some threads might have died */
|
||||
num_threads_died += restart_count - restarted_count;
|
||||
/* wait for the threads to signal their suspension
|
||||
@@ -251,7 +250,6 @@ sgen_client_stop_world (int generation)
|
||||
void
|
||||
sgen_client_restart_world (int generation, GGTimingInfo *timing)
|
||||
{
|
||||
SgenThreadInfo *info;
|
||||
TV_DECLARE (end_sw);
|
||||
TV_DECLARE (start_handshake);
|
||||
TV_DECLARE (end_bridge);
|
||||
@@ -269,7 +267,7 @@ sgen_client_restart_world (int generation, GGTimingInfo *timing)
|
||||
#else
|
||||
memset (&info->client_info.regs, 0, sizeof (info->client_info.regs));
|
||||
#endif
|
||||
} END_FOREACH_THREAD
|
||||
} FOREACH_THREAD_END
|
||||
|
||||
TV_GETTIME (start_handshake);
|
||||
|
||||
@@ -387,13 +385,12 @@ static void
|
||||
sgen_unified_suspend_stop_world (void)
|
||||
{
|
||||
int restart_counter;
|
||||
SgenThreadInfo *info;
|
||||
int sleep_duration = -1;
|
||||
|
||||
mono_threads_begin_global_suspend ();
|
||||
THREADS_STW_DEBUG ("[GC-STW-BEGIN] *** BEGIN SUSPEND *** \n");
|
||||
|
||||
FOREACH_THREAD_SAFE (info) {
|
||||
FOREACH_THREAD (info) {
|
||||
info->client_info.skip = FALSE;
|
||||
info->client_info.suspend_done = FALSE;
|
||||
if (sgen_is_thread_in_current_stw (info)) {
|
||||
@@ -402,14 +399,14 @@ sgen_unified_suspend_stop_world (void)
|
||||
} else {
|
||||
THREADS_STW_DEBUG ("[GC-STW-BEGIN-SUSPEND] IGNORE thread %p skip %d\n", mono_thread_info_get_tid (info), info->client_info.skip);
|
||||
}
|
||||
} END_FOREACH_THREAD_SAFE
|
||||
} FOREACH_THREAD_END
|
||||
|
||||
mono_thread_info_current ()->client_info.suspend_done = TRUE;
|
||||
mono_threads_wait_pending_operations ();
|
||||
|
||||
for (;;) {
|
||||
restart_counter = 0;
|
||||
FOREACH_THREAD_SAFE (info) {
|
||||
FOREACH_THREAD (info) {
|
||||
if (info->client_info.suspend_done || !sgen_is_thread_in_current_stw (info)) {
|
||||
THREADS_STW_DEBUG ("[GC-STW-RESTART] IGNORE thread %p not been processed done %d current %d\n", mono_thread_info_get_tid (info), info->client_info.suspend_done, !sgen_is_thread_in_current_stw (info));
|
||||
continue;
|
||||
@@ -438,7 +435,7 @@ sgen_unified_suspend_stop_world (void)
|
||||
g_assert (!info->client_info.in_critical_region);
|
||||
info->client_info.suspend_done = TRUE;
|
||||
}
|
||||
} END_FOREACH_THREAD_SAFE
|
||||
} FOREACH_THREAD_END
|
||||
|
||||
if (restart_counter == 0)
|
||||
break;
|
||||
@@ -456,19 +453,19 @@ sgen_unified_suspend_stop_world (void)
|
||||
sleep_duration += 10;
|
||||
}
|
||||
|
||||
FOREACH_THREAD_SAFE (info) {
|
||||
FOREACH_THREAD (info) {
|
||||
if (sgen_is_thread_in_current_stw (info) && mono_thread_info_is_running (info)) {
|
||||
gboolean res = mono_thread_info_begin_suspend (info, FALSE);
|
||||
THREADS_STW_DEBUG ("[GC-STW-RESTART] SUSPEND thread %p skip %d\n", mono_thread_info_get_tid (info), res);
|
||||
if (!res)
|
||||
info->client_info.skip = TRUE;
|
||||
}
|
||||
} END_FOREACH_THREAD_SAFE
|
||||
} FOREACH_THREAD_END
|
||||
|
||||
mono_threads_wait_pending_operations ();
|
||||
}
|
||||
|
||||
FOREACH_THREAD_SAFE (info) {
|
||||
FOREACH_THREAD (info) {
|
||||
if (sgen_is_thread_in_current_stw (info)) {
|
||||
THREADS_STW_DEBUG ("[GC-STW-SUSPEND-END] thread %p is suspended\n", mono_thread_info_get_tid (info));
|
||||
g_assert (info->client_info.suspend_done);
|
||||
@@ -476,23 +473,21 @@ sgen_unified_suspend_stop_world (void)
|
||||
} else {
|
||||
g_assert (!info->client_info.suspend_done || info == mono_thread_info_current ());
|
||||
}
|
||||
} END_FOREACH_THREAD_SAFE
|
||||
} FOREACH_THREAD_END
|
||||
}
|
||||
|
||||
static void
|
||||
sgen_unified_suspend_restart_world (void)
|
||||
{
|
||||
SgenThreadInfo *info;
|
||||
|
||||
THREADS_STW_DEBUG ("[GC-STW-END] *** BEGIN RESUME ***\n");
|
||||
FOREACH_THREAD_SAFE (info) {
|
||||
FOREACH_THREAD (info) {
|
||||
if (sgen_is_thread_in_current_stw (info)) {
|
||||
g_assert (mono_thread_info_begin_resume (info));
|
||||
THREADS_STW_DEBUG ("[GC-STW-RESUME-WORLD] RESUME thread %p\n", mono_thread_info_get_tid (info));
|
||||
} else {
|
||||
THREADS_STW_DEBUG ("[GC-STW-RESUME-WORLD] IGNORE thread %p\n", mono_thread_info_get_tid (info));
|
||||
}
|
||||
} END_FOREACH_THREAD_SAFE
|
||||
} FOREACH_THREAD_END
|
||||
|
||||
mono_threads_wait_pending_operations ();
|
||||
mono_threads_end_global_suspend ();
|
||||
|
||||
@@ -801,7 +801,7 @@ EXTRA_DIST = TestDriver.cs \
|
||||
Makefile.am.in
|
||||
|
||||
version.h: Makefile
|
||||
echo "#define FULL_VERSION \"Stable 4.3.2.467/ba2e5e4\"" > version.h
|
||||
echo "#define FULL_VERSION \"Stable 4.4.0.40/f8474c4\"" > version.h
|
||||
|
||||
# Utility target for patching libtool to speed up linking
|
||||
patch-libtool:
|
||||
|
||||
@@ -801,7 +801,7 @@ EXTRA_DIST = TestDriver.cs \
|
||||
Makefile.am.in
|
||||
|
||||
version.h: Makefile
|
||||
echo "#define FULL_VERSION \"Stable 4.3.2.467/ba2e5e4\"" > version.h
|
||||
echo "#define FULL_VERSION \"Stable 4.4.0.40/f8474c4\"" > version.h
|
||||
|
||||
# Utility target for patching libtool to speed up linking
|
||||
patch-libtool:
|
||||
|
||||
@@ -1 +1 @@
|
||||
26c259ab73e00ef686162f329e573254e8a1a8be
|
||||
feaddf3ea0bb6cd34b061a30d89031f0d11d66ec
|
||||
@@ -1 +1 @@
|
||||
91cb5ce5004d809c09f9c0d8a526f78070c03c8d
|
||||
26979427a0ebbb4e979939dad6a0e766cc2b6917
|
||||
@@ -1 +1 @@
|
||||
13f9263e7cb11b6262697f85d44bc8d01a9ccd07
|
||||
26d4d91456e706536c43cb083afe6adde5d651e0
|
||||
@@ -262,7 +262,7 @@ mono_arch_get_call_filter (MonoTrampInfo **info, gboolean aot)
|
||||
continue;
|
||||
#endif
|
||||
if (AMD64_IS_CALLEE_SAVED_REG (i) && i != AMD64_RBP)
|
||||
amd64_mov_reg_membase (code, AMD64_RBX, AMD64_ARG_REG1, gregs_offset + (i * 8), 8);
|
||||
amd64_mov_reg_membase (code, i, AMD64_ARG_REG1, gregs_offset + (i * 8), 8);
|
||||
}
|
||||
/* load exc register */
|
||||
amd64_mov_reg_membase (code, AMD64_RAX, AMD64_ARG_REG1, gregs_offset + (AMD64_RAX * 8), 8);
|
||||
|
||||
@@ -12,6 +12,13 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <llvm-c/Core.h>
|
||||
#include <llvm-c/ExecutionEngine.h>
|
||||
|
||||
#include "mini-llvm-cpp.h"
|
||||
|
||||
#if !defined(MONO_CROSS_COMPILE) && LLVM_API_VERSION < 100
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <llvm/Support/raw_ostream.h>
|
||||
@@ -36,13 +43,6 @@
|
||||
#include <llvm/IR/IRBuilder.h>
|
||||
#include <llvm/IR/Module.h>
|
||||
|
||||
#include <llvm-c/Core.h>
|
||||
#include <llvm-c/ExecutionEngine.h>
|
||||
|
||||
#include "mini-llvm-cpp.h"
|
||||
|
||||
#ifndef MONO_CROSS_COMPILE
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
static void (*unhandled_exception)() = default_mono_llvm_unhandled_exception;
|
||||
|
||||
@@ -1 +1 @@
|
||||
915dc58fe04dbc4ab7dd14806c61b46212a195f9
|
||||
c4647d8650c5892dc0c3989cb5d74e993161ffcc
|
||||
@@ -326,7 +326,6 @@ per_thread_profiler_hit (void *ctx)
|
||||
|
||||
MONO_SIG_HANDLER_FUNC (static, sigprof_signal_handler)
|
||||
{
|
||||
MonoThreadInfo *info;
|
||||
int old_errno = errno;
|
||||
int hp_save_index;
|
||||
MONO_SIG_HANDLER_GET_CONTEXT;
|
||||
@@ -348,7 +347,7 @@ MONO_SIG_HANDLER_FUNC (static, sigprof_signal_handler)
|
||||
|
||||
mono_threads_add_async_job (info, MONO_SERVICE_REQUEST_SAMPLE);
|
||||
mono_threads_pthread_kill (info, profiling_signal_in_use);
|
||||
} END_FOREACH_THREAD_SAFE;
|
||||
} FOREACH_THREAD_SAFE_END
|
||||
}
|
||||
|
||||
mono_thread_info_set_is_async_context (TRUE);
|
||||
|
||||
@@ -1 +1 @@
|
||||
#define FULL_VERSION "Stable 4.3.2.467/ba2e5e4"
|
||||
#define FULL_VERSION "Stable 4.4.0.40/f8474c4"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user