< prev index next >
src/java.base/windows/native/libnio/ch/WindowsSelectorImpl.c
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2017, 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -30,10 +30,11 @@
/* This number should be equal to WindowsSelectorImpl.MAX_SELECTABLE_FDS */
/* This definition MUST precede the inclusion of winsock2.h */
#define FD_SETSIZE 1024
+#include <limits.h>
#include <stdlib.h>
#include <winsock2.h>
#include "jvm.h"
#include "jni.h"
@@ -73,13 +74,23 @@
tv = &zerotime;
} else if (timeout < 0) {
tv = NULL;
} else {
tv = &timevalue;
- tv->tv_sec = (long)(timeout / 1000);
+ jlong sec = timeout / 1000;
+ //
+ // struct timeval members are signed 32-bit integers so the
+ // signed 64-bit jlong needs to clamped
+ //
+ if (sec > INT_MAX) {
+ tv->tv_sec = INT_MAX;
+ tv->tv_usec = 0;
+ } else {
+ tv->tv_sec = (long)sec;
tv->tv_usec = (long)((timeout % 1000) * 1000);
}
+ }
/* Set FD_SET structures required for select */
for (i = 0; i < numfds; i++) {
if (fds[i].events & POLLIN) {
readfds.fd_array[read_count] = fds[i].fd;
< prev index next >