Alex,

The following bug was filed to track this issue:

JDK-8145278 Memory leak in splitPathList
https://bugs.openjdk.java.net/browse/JDK-8145278

I added a comment to that bug report and it turns out
that Dmitry had a similar comment back in November...

The discussion need to move from the mailing list to
the bug report.

Dan


On 12/15/15 1:43 PM, Alex Henrie wrote:
# HG changeset patch
# User Alex Henrie <alexhenri...@gmail.com>
# Date 1447827030 25200
#      Tue Nov 17 23:10:30 2015 -0700
# Node ID 6dca8affef8a4566dfaa36faeb7a14fc4086843a
# Parent  dc90094c0d66b3df2944da215d93542507c31e60
Skip the null pointer check before calling realloc.

"If ptr is a null pointer, realloc() shall be equivalent to malloc() for
the specified size."
http://pubs.opengroup.org/onlinepubs/9699919799/functions/realloc.html

Also, sizeof(char*) is more correct here than sizeof(char**), although
in practice it doesn't make a difference.

diff --git a/src/java.instrument/share/native/libinstrument/InvocationAdapter.c 
b/src/java.instrument/share/native/libinstrument/InvocationAdapter.c
--- a/src/java.instrument/share/native/libinstrument/InvocationAdapter.c
+++ b/src/java.instrument/share/native/libinstrument/InvocationAdapter.c
@@ -519,21 +519,17 @@ splitPathList(const char* str, int* path
      int count = 0;
      char** segments = NULL;
      char* c = (char*) str;
      while (*c != '\0') {
          while (*c == ' ') c++;          /* skip leading spaces */
          if (*c == '\0') {
              break;
          }
-        if (segments == NULL) {
-            segments = (char**)malloc( sizeof(char**) );
-        } else {
-            segments = (char**)realloc( segments, (count+1)*sizeof(char**) );
-        }
+        segments = (char**)realloc( segments, (count+1)*sizeof(char*) );
          jplis_assert(segments != (char**)NULL);
          segments[count++] = c;
          c = strchr(c, ' ');
          if (c == NULL) {
              break;
          }
          *c = '\0';
          c++;

Reply via email to