summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2005-04-17 08:23:51 +0000
committerXavier Leroy <xavier.leroy@inria.fr>2005-04-17 08:23:51 +0000
commitbc037fc29f49351520ac932b5f5089efba2b9e9c (patch)
tree7c39634ed2ab4c0e0090349429b1782190509f06
parent1a1693484192cfad2ed2622ab1166da953bf2225 (diff)
Normalisation des numeros de signaux renvoyes par Unix.wait* (PR#3584)
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@6845 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--asmrun/signals.c9
-rw-r--r--byterun/signals.c9
-rw-r--r--byterun/signals.h1
-rw-r--r--otherlibs/unix/wait.c4
4 files changed, 13 insertions, 10 deletions
diff --git a/asmrun/signals.c b/asmrun/signals.c
index 6f3c607ae..3f7c4f1d1 100644
--- a/asmrun/signals.c
+++ b/asmrun/signals.c
@@ -53,7 +53,7 @@ value caml_signal_handlers = 0;
void (*caml_enter_blocking_section_hook)() = NULL;
void (*caml_leave_blocking_section_hook)() = NULL;
-static int rev_convert_signal_number(int signo);
+int caml_rev_convert_signal_number(int signo);
/* Execute a signal handler immediately. */
@@ -66,8 +66,9 @@ void caml_execute_signal(int signal_number, int in_signal_handler)
sigemptyset(&sigs);
sigaddset(&sigs, signal_number);
sigprocmask(SIG_BLOCK, &sigs, &sigs);
- res = caml_callback_exn(Field(caml_signal_handlers, signal_number),
- Val_int(rev_convert_signal_number(signal_number)));
+ res = caml_callback_exn(
+ Field(caml_signal_handlers, signal_number),
+ Val_int(caml_rev_convert_signal_number(signal_number)));
if (! in_signal_handler) {
/* Restore the original signal mask */
sigprocmask(SIG_SETMASK, &sigs, NULL);
@@ -247,7 +248,7 @@ int caml_convert_signal_number(int signo)
return signo;
}
-static int rev_convert_signal_number(int signo)
+int caml_rev_convert_signal_number(int signo)
{
int i;
for (i = 0; i < sizeof(posix_signals) / sizeof(int); i++)
diff --git a/byterun/signals.c b/byterun/signals.c
index 0b5e50bfc..b64701ac3 100644
--- a/byterun/signals.c
+++ b/byterun/signals.c
@@ -59,7 +59,7 @@ void caml_process_event(void)
if (async_action != NULL) (*async_action)();
}
-static int rev_convert_signal_number(int signo);
+CAMLexport int caml_rev_convert_signal_number(int signo);
void caml_execute_signal(int signal_number, int in_signal_handler)
{
@@ -72,8 +72,9 @@ void caml_execute_signal(int signal_number, int in_signal_handler)
sigaddset(&sigs, signal_number);
sigprocmask(SIG_BLOCK, &sigs, &sigs);
#endif
- res = caml_callback_exn(Field(caml_signal_handlers, signal_number),
- Val_int(rev_convert_signal_number(signal_number)));
+ res = caml_callback_exn(
+ Field(caml_signal_handlers, signal_number),
+ Val_int(caml_rev_convert_signal_number(signal_number)));
#ifdef POSIX_SIGNALS
if (! in_signal_handler) {
/* Restore the original signal mask */
@@ -228,7 +229,7 @@ CAMLexport int caml_convert_signal_number(int signo)
return signo;
}
-static int rev_convert_signal_number(int signo)
+CAMLexport int caml_rev_convert_signal_number(int signo)
{
int i;
for (i = 0; i < sizeof(posix_signals) / sizeof(int); i++)
diff --git a/byterun/signals.h b/byterun/signals.h
index 4330ca860..82ec23430 100644
--- a/byterun/signals.h
+++ b/byterun/signals.h
@@ -36,6 +36,7 @@ CAMLextern void caml_leave_blocking_section (void);
/* <private> */
void caml_urge_major_slice (void);
CAMLextern int caml_convert_signal_number (int);
+CAMLextern int caml_rev_convert_signal_number (int);
void caml_execute_signal(int signal_number, int in_signal_handler);
void caml_process_event(void);
diff --git a/otherlibs/unix/wait.c b/otherlibs/unix/wait.c
index 5d74b8380..486d06af7 100644
--- a/otherlibs/unix/wait.c
+++ b/otherlibs/unix/wait.c
@@ -47,11 +47,11 @@ static value alloc_process_status(int pid, int status)
}
else if (WIFSTOPPED(status)) {
st = alloc_small(1, TAG_WSTOPPED);
- Field(st, 0) = Val_int(WSTOPSIG(status));
+ Field(st, 0) = Val_int(caml_rev_convert_signal_number(WSTOPSIG(status)));
}
else {
st = alloc_small(1, TAG_WSIGNALED);
- Field(st, 0) = Val_int(WTERMSIG(status));
+ Field(st, 0) = Val_int(caml_rev_convert_signal_number(WTERMSIG(status)));
}
Begin_root (st);
res = alloc_small(2, 0);