summaryrefslogtreecommitdiffstats
path: root/nsprpub/pr/tests/forktest.c
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@gmail.com>2018-04-25 21:33:57 +0200
committerwolfbeast <mcwerewolf@gmail.com>2018-04-25 21:33:57 +0200
commit7c4d50dccf3080965c202f63aa56439e3824eaf3 (patch)
tree59026bd0f554a24878db82841a508c8fa7ca8356 /nsprpub/pr/tests/forktest.c
parentfba28f19754f62b5227650143d5441fc86d4c7d7 (diff)
downloadUXP-7c4d50dccf3080965c202f63aa56439e3824eaf3.tar
UXP-7c4d50dccf3080965c202f63aa56439e3824eaf3.tar.gz
UXP-7c4d50dccf3080965c202f63aa56439e3824eaf3.tar.lz
UXP-7c4d50dccf3080965c202f63aa56439e3824eaf3.tar.xz
UXP-7c4d50dccf3080965c202f63aa56439e3824eaf3.zip
Revert "Update NSPR to 4.18"
This reverts commit 8781f745556be5d7402d0f3adc67ecfe32fe04a0.
Diffstat (limited to 'nsprpub/pr/tests/forktest.c')
-rw-r--r--nsprpub/pr/tests/forktest.c47
1 files changed, 46 insertions, 1 deletions
diff --git a/nsprpub/pr/tests/forktest.c b/nsprpub/pr/tests/forktest.c
index 66dc64575..a389fa479 100644
--- a/nsprpub/pr/tests/forktest.c
+++ b/nsprpub/pr/tests/forktest.c
@@ -196,6 +196,51 @@ finish:
return;
}
+#ifdef _PR_DCETHREADS
+
+#include <syscall.h>
+
+pid_t PR_UnixFork1(void)
+{
+ pid_t parent = getpid();
+ int rv = syscall(SYS_fork);
+
+ if (rv == -1) {
+ return (pid_t) -1;
+ } else {
+ /* For each process, rv is the pid of the other process */
+ if (rv == parent) {
+ /* the child */
+ return 0;
+ } else {
+ /* the parent */
+ return rv;
+ }
+ }
+}
+
+#elif defined(SOLARIS)
+
+/*
+ * It seems like that in Solaris 2.4 one must call fork1() if the
+ * the child process is going to use thread functions. Solaris 2.5
+ * doesn't have this problem. Calling fork() also works.
+ */
+
+pid_t PR_UnixFork1(void)
+{
+ return fork1();
+}
+
+#else
+
+pid_t PR_UnixFork1(void)
+{
+ return fork();
+}
+
+#endif /* PR_DCETHREADS */
+
int main(int argc, char **argv)
{
pid_t pid;
@@ -205,7 +250,7 @@ int main(int argc, char **argv)
DoIO();
- pid = fork();
+ pid = PR_UnixFork1();
if (pid == (pid_t) -1) {
fprintf(stderr, "Fork failed: errno %d\n", errno);