PR#5982: save and restore the value of errno in signal handlers
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@13667 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02master
parent
200f97fef6
commit
d69bd84bb3
|
@ -17,6 +17,7 @@
|
|||
#define _GNU_SOURCE
|
||||
#endif
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include "fail.h"
|
||||
#include "memory.h"
|
||||
|
@ -73,6 +74,9 @@ void caml_garbage_collection(void)
|
|||
|
||||
DECLARE_SIGNAL_HANDLER(handle_signal)
|
||||
{
|
||||
int saved_errno;
|
||||
/* Save the value of errno (PR#5982). */
|
||||
saved_errno = errno;
|
||||
#if !defined(POSIX_SIGNALS) && !defined(BSD_SIGNALS)
|
||||
signal(sig, handle_signal);
|
||||
#endif
|
||||
|
@ -90,6 +94,7 @@ DECLARE_SIGNAL_HANDLER(handle_signal)
|
|||
CONTEXT_YOUNG_LIMIT = (context_reg) caml_young_limit;
|
||||
#endif
|
||||
}
|
||||
errno = saved_errno;
|
||||
}
|
||||
|
||||
int caml_set_signal_action(int signo, int action)
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
/* Signal handling, code specific to the bytecode interpreter */
|
||||
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include "config.h"
|
||||
#include "memory.h"
|
||||
#include "osdeps.h"
|
||||
|
@ -49,6 +50,9 @@ void caml_process_event(void)
|
|||
|
||||
static void handle_signal(int signal_number)
|
||||
{
|
||||
int saved_errno;
|
||||
/* Save the value of errno (PR#5982). */
|
||||
saved_errno = errno;
|
||||
#if !defined(POSIX_SIGNALS) && !defined(BSD_SIGNALS)
|
||||
signal(signal_number, handle_signal);
|
||||
#endif
|
||||
|
@ -58,7 +62,8 @@ static void handle_signal(int signal_number)
|
|||
caml_enter_blocking_section_hook();
|
||||
}else{
|
||||
caml_record_signal(signal_number);
|
||||
}
|
||||
}
|
||||
errno = saved_errno;
|
||||
}
|
||||
|
||||
int caml_set_signal_action(int signo, int action)
|
||||
|
|
Loading…
Reference in New Issue