8206301: Improve NIO stability
authorbpb
Thu, 19 Jul 2018 07:02:42 -0700
changeset 53312 ee7b0da99262
parent 53311 205d2db1dc25
child 53313 c66b192fe3b4
8206301: Improve NIO stability Reviewed-by: alanb, mschoene, rhalade
src/java.base/windows/native/libnio/ch/DatagramDispatcher.c
src/java.base/windows/native/libnio/ch/WindowsSelectorImpl.c
--- a/src/java.base/windows/native/libnio/ch/DatagramDispatcher.c	Thu Jun 14 23:47:05 2018 +0000
+++ b/src/java.base/windows/native/libnio/ch/DatagramDispatcher.c	Thu Jul 19 07:02:42 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -95,6 +95,10 @@
     jint fd = fdval(env, fdo);
     struct iovec *iovp = (struct iovec *)address;
     WSABUF *bufs = malloc(len * sizeof(WSABUF));
+    if (bufs == NULL) {
+        JNU_ThrowOutOfMemoryError(env, NULL);
+        return IOS_THROWN;
+    }
 
     /* copy iovec into WSABUF */
     for(i=0; i<len; i++) {
@@ -182,6 +186,10 @@
     jint fd = fdval(env, fdo);
     struct iovec *iovp = (struct iovec *)address;
     WSABUF *bufs = malloc(len * sizeof(WSABUF));
+    if (bufs == NULL) {
+        JNU_ThrowOutOfMemoryError(env, NULL);
+        return IOS_THROWN;
+    }
 
     /* copy iovec into WSABUF */
     for(i=0; i<len; i++) {
--- a/src/java.base/windows/native/libnio/ch/WindowsSelectorImpl.c	Thu Jun 14 23:47:05 2018 +0000
+++ b/src/java.base/windows/native/libnio/ch/WindowsSelectorImpl.c	Thu Jul 19 07:02:42 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -219,6 +219,10 @@
     /* Prepare corresponding buffer if needed, and then read */
     if (bytesToRead > WAKEUP_SOCKET_BUF_SIZE) {
         char* buf = (char*)malloc(bytesToRead);
+        if (buf == NULL) {
+            JNU_ThrowOutOfMemoryError(env, NULL);
+            return;
+        }
         recv(scinFd, buf, bytesToRead, 0);
         free(buf);
     } else {