mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-19 03:49:12 +08:00
natPosixProcess.cc (myclose): New function.
* java/lang/natPosixProcess.cc (myclose): New function. (fail): Use it. (startProcess): Likewise. From-SVN: r49433
This commit is contained in:
parent
5ffc350051
commit
0c91936e40
@ -1,3 +1,9 @@
|
||||
2002-02-01 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* java/lang/natPosixProcess.cc (myclose): New function.
|
||||
(fail): Use it.
|
||||
(startProcess): Likewise.
|
||||
|
||||
2002-02-01 Adam Megacz <adam@xwt.org>
|
||||
|
||||
* prims.cc: Added #undef STRICT after #include<windows.h>.
|
||||
|
@ -1,6 +1,6 @@
|
||||
// natPosixProcess.cc - Native side of POSIX process code.
|
||||
|
||||
/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
|
||||
/* Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
@ -103,6 +103,17 @@ cleanup (char **args, char **env)
|
||||
}
|
||||
}
|
||||
|
||||
// This makes our error handling a bit simpler and it lets us avoid
|
||||
// thread bugs where we close a possibly-reopened file descriptor for
|
||||
// a second time.
|
||||
static void
|
||||
myclose (int &fd)
|
||||
{
|
||||
if (fd != -1)
|
||||
close (fd);
|
||||
fd = -1;
|
||||
}
|
||||
|
||||
static void
|
||||
fail (int error_value, char **args, char **env,
|
||||
int *one = NULL, int *two = NULL,
|
||||
@ -112,23 +123,23 @@ fail (int error_value, char **args, char **env,
|
||||
cleanup (args, env);
|
||||
if (one != NULL)
|
||||
{
|
||||
close (one[0]);
|
||||
close (one[1]);
|
||||
myclose (one[0]);
|
||||
myclose (one[1]);
|
||||
}
|
||||
if (two != NULL)
|
||||
{
|
||||
close (two[0]);
|
||||
close (two[1]);
|
||||
myclose (two[0]);
|
||||
myclose (two[1]);
|
||||
}
|
||||
if (three != NULL)
|
||||
{
|
||||
close (three[0]);
|
||||
close (three[1]);
|
||||
myclose (three[0]);
|
||||
myclose (three[1]);
|
||||
}
|
||||
if (four != NULL)
|
||||
{
|
||||
close (four[0]);
|
||||
close (four[1]);
|
||||
myclose (four[0]);
|
||||
myclose (four[1]);
|
||||
}
|
||||
if (t == NULL)
|
||||
t = new java::io::IOException (JvNewStringLatin1 (strerror (error_value)));
|
||||
@ -238,6 +249,8 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray,
|
||||
dup2 (inp[1], 1);
|
||||
dup2 (errp[1], 2);
|
||||
|
||||
// Use close and not myclose -- we're in the child, and we
|
||||
// aren't worried about the possible race condition.
|
||||
close (inp[0]);
|
||||
close (inp[1]);
|
||||
close (errp[0]);
|
||||
@ -256,10 +269,10 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray,
|
||||
|
||||
// Parent. Close extra file descriptors and mark ours as
|
||||
// close-on-exec.
|
||||
close (outp[0]);
|
||||
close (inp[1]);
|
||||
close (errp[1]);
|
||||
close (msgp[1]);
|
||||
myclose (outp[0]);
|
||||
myclose (inp[1]);
|
||||
myclose (errp[1]);
|
||||
myclose (msgp[1]);
|
||||
|
||||
char c;
|
||||
int r = read (msgp[0], &c, 1);
|
||||
@ -268,7 +281,7 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray,
|
||||
else if (r != 0)
|
||||
fail (c, args, env, inp, outp, errp, msgp);
|
||||
|
||||
close (msgp[0]);
|
||||
myclose (msgp[0]);
|
||||
cleanup (args, env);
|
||||
|
||||
fcntl (outp[1], F_SETFD, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user