Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel de Icaza <miguel@gnome.org>2005-05-03 02:41:21 +0400
committerMiguel de Icaza <miguel@gnome.org>2005-05-03 02:41:21 +0400
commit1f5df3a0306c7948a1b95083e00342ff0bc2ecd8 (patch)
treea7840cde61f08c257f0208e7c266f123fe5a19c8 /libgc/pthread_stop_world.c
parentb16f9217e6f48aeea2c6a46bea0cd609a987661b (diff)
2005-05-02 Miguel de Icaza <miguel@novell.com>
* pthread_stop_world.c (GC_restart_handler, GC_suspend_handler): Wrap the original routines into methods that preserve the value of errno. Fixes #74740 svn path=/trunk/mono/; revision=43905
Diffstat (limited to 'libgc/pthread_stop_world.c')
-rw-r--r--libgc/pthread_stop_world.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/libgc/pthread_stop_world.c b/libgc/pthread_stop_world.c
index 06e919b2848..60a63d5d8ac 100644
--- a/libgc/pthread_stop_world.c
+++ b/libgc/pthread_stop_world.c
@@ -101,7 +101,7 @@ word GC_stop_count; /* Incremented at the beginning of GC_stop_world. */
sem_t GC_suspend_ack_sem;
-void GC_suspend_handler(int sig)
+static void _GC_suspend_handler(int sig)
{
int dummy;
pthread_t my_thread = pthread_self();
@@ -168,7 +168,14 @@ void GC_suspend_handler(int sig)
#endif
}
-void GC_restart_handler(int sig)
+void GC_suspend_handler(int sig)
+{
+ int old_errno = errno;
+ _GC_suspend_handler(sig);
+ errno = old_errno;
+}
+
+static void _GC_restart_handler(int sig)
{
pthread_t my_thread = pthread_self();
GC_thread me;
@@ -270,6 +277,13 @@ static void pthread_push_all_stacks()
ABORT("Collecting from unknown thread.");
}
+void GC_restart_handler(int sig)
+{
+ int old_errno = errno;
+ _GC_restart_handler (sig);
+ errno = old_errno;
+}
+
/* We hold allocation lock. Should do exactly the right thing if the */
/* world is stopped. Should not fail if it isn't. */
void GC_push_all_stacks()