Date: Wed, 07 Jun 2000 14:46:06 +0100 From: "Koster, K.J." <K.J.Koster@kpn.com> To: 'Cliff Rowley' <cliff@olive.co.uk> Cc: 'FreeBSD Java mailing list' <freebsd-java@freebsd.org> Subject: RE: Exec patch? Message-ID: <59063B5B4D98D311BC0D0001FA7E4522026D7609@l04.research.kpn.com>
next in thread | raw e-mail | index | archive | help
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
------_=_NextPart_000_01BFD086.BACC5894
Content-Type: text/plain;
charset="iso-8859-1"
This one?
Kees Jan
==============================================
Everyone is responsible for his own actions,
and (people tend to forget this) the effect
they have on others.
------_=_NextPart_000_01BFD086.BACC5894
Content-Type: application/octet-stream;
name="wait.diff"
Content-Disposition: attachment;
filename="wait.diff"
Index: src/freebsd/native/java/lang/UNIXProcess_md.c
===================================================================
RCS file: /data/java/JDK2/javasrc/src/freebsd/native/java/lang/UNIXProcess_md.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- src/freebsd/native/java/lang/UNIXProcess_md.c 1999/10/11 18:46:30 1.2
+++ src/freebsd/native/java/lang/UNIXProcess_md.c 2000/05/31 15:46:04 1.3
@@ -166,8 +166,9 @@
JNIEXPORT void JNICALL
Java_java_lang_UNIXProcess_run(JNIEnv *env, jobject process)
{
-#ifdef __FreeBSD__ /*** XXX ***/
- char info[256];
+#ifdef __FreeBSD__
+ pid_t pid;
+ int status;
#else
siginfo_t info;
#endif
@@ -188,14 +189,14 @@
/* block this reaper thread until the child process exits */
#ifdef __FreeBSD__
-/* waitpid() is a wrapper, that does the "right thing" already */
- if (waitid(P_ALL, 0, &info, WEXITED) != 0) {
- continue;
- }
+ /* waitpid() is a wrapper, that does the "right thing" already */
+ pid = waitid(P_ALL, 0, &status, WEXITED);
#else
if (waitid(P_ALL, 0, &info, WEXITED) != 0 || info.si_pid == 0) {
continue;
}
+ pid = info.si_pid;
+ status = info.si_status;
#endif
(*env)->MonitorEnter(env, fork_wait_mon);
@@ -205,13 +206,8 @@
"java/lang/UNIXProcess",
"deadChild",
"(II)V",
-#ifdef __FreeBSD__ /*** XXX ***/
- 0,
- 0
-#else
- info.si_pid,
- info.si_status
-#endif
+ pid,
+ status
);
if ((*env)->ExceptionOccurred(env)) {
return;
Index: src/freebsd/hpi/green_threads/src/synch.c
===================================================================
RCS file: /data/java/JDK2/javasrc/src/freebsd/hpi/green_threads/src/synch.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- src/freebsd/hpi/green_threads/src/synch.c 1999/11/03 03:54:58 1.4
+++ src/freebsd/hpi/green_threads/src/synch.c 2000/05/31 15:41:06 1.5
@@ -170,7 +170,7 @@
#ifdef __FreeBSD__
pid_t fork1(void);
-int waitid(int, int, void *, int);
+pid_t waitid(int, int, int *, int);
#endif
/* For java.lang.Process */
@@ -179,17 +179,16 @@
extern int _waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options)
#else
-int waitid(int idtype, int id, void *infop, int options)
+pid_t waitid(int idtype, int id, int *status, int options)
#endif
{
sys_mon_t *mon = asyncMon(SYS_ASYNC_MON_CHILD);
#ifdef __FreeBSD__
- int status;
pid_t pid;
sysMonitorEnter(sysThreadSelf(), mon);
do {
- pid = waitpid(-1, &status, WNOHANG);
+ pid = waitpid(-1, status, WNOHANG);
if ((int)pid > 0 && !WIFSTOPPED(status))
break;
sysMonitorWait(sysThreadSelf(), mon, SYS_TIMEOUT_INFINITY);
@@ -202,7 +201,11 @@
}
#endif
sysMonitorExit(sysThreadSelf(), mon);
+#ifdef __FreeBSD__
+ return pid;
+#else
return 0;
+#endif
}
#ifndef __FreeBSD__
------_=_NextPart_000_01BFD086.BACC5894--
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-java" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?59063B5B4D98D311BC0D0001FA7E4522026D7609>
