From a743b53b8648cca4091b0d34ecaf08b6b72288df Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Sat, 18 Jan 2014 13:12:17 +0100 Subject: [PATCH] Fix for a "file handler" leak in native openPort method. This bug leads to VM crashes (at least on Linux) when the number of "leaked" handlers goes over 1024 and a select is made on one of them (for example during readBytes). --- src/cpp/_nix_based/jssc.cpp | 1 + src/cpp/windows/jssc.c++ | 1 + 2 files changed, 2 insertions(+) diff --git a/src/cpp/_nix_based/jssc.cpp b/src/cpp/_nix_based/jssc.cpp index 230e248..e9de916 100644 --- a/src/cpp/_nix_based/jssc.cpp +++ b/src/cpp/_nix_based/jssc.cpp @@ -72,6 +72,7 @@ JNIEXPORT jlong JNICALL Java_jssc_SerialNativeInterface_openPort(JNIEnv *env, jo fcntl(hComm, F_SETFL, flags); } else { + close(hComm); hComm = jssc_SerialNativeInterface_ERR_INCORRECT_SERIAL_PORT;//-4; } delete settings; diff --git a/src/cpp/windows/jssc.c++ b/src/cpp/windows/jssc.c++ index dae4980..7d9b095 100644 --- a/src/cpp/windows/jssc.c++ +++ b/src/cpp/windows/jssc.c++ @@ -57,6 +57,7 @@ JNIEXPORT jlong JNICALL Java_jssc_SerialNativeInterface_openPort(JNIEnv *env, jo if(hComm != INVALID_HANDLE_VALUE){ DCB *dcb = new DCB(); if(!GetCommState(hComm, dcb)){ + CloseHandle(hComm); hComm = (HANDLE)jssc_SerialNativeInterface_ERR_INCORRECT_SERIAL_PORT;//(-4)Incorrect serial port } delete dcb;