summaryrefslogtreecommitdiffstats
path: root/libjava/java/io/natFileDescriptorPosix.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/io/natFileDescriptorPosix.cc')
-rw-r--r--libjava/java/io/natFileDescriptorPosix.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/libjava/java/io/natFileDescriptorPosix.cc b/libjava/java/io/natFileDescriptorPosix.cc
index 50be35c24be..6e06a034dd9 100644
--- a/libjava/java/io/natFileDescriptorPosix.cc
+++ b/libjava/java/io/natFileDescriptorPosix.cc
@@ -43,6 +43,7 @@ details. */
#include <java/io/EOFException.h>
#include <java/lang/ArrayIndexOutOfBoundsException.h>
#include <java/lang/NullPointerException.h>
+#include <java/lang/System.h>
#include <java/lang/String.h>
#include <java/lang/Thread.h>
#include <java/io/FileNotFoundException.h>
@@ -105,6 +106,13 @@ java::io::FileDescriptor::open (jstring path, jint jflags)
}
int fd = ::open (buf, flags, mode);
+ if (fd == -1 && errno == EMFILE)
+ {
+ // Because finalize () calls close () we might be able to continue.
+ java::lang::System::gc ();
+ java::lang::System::runFinalization ();
+ fd = ::open (buf, flags, mode);
+ }
if (fd == -1)
{
char msg[MAXPATHLEN + 200];
OpenPOWER on IntegriCloud