[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-awt-dev
Subject:    Re: <AWT Dev> Proposal: Memory leak issue on awt_InputMethod.c
From:       Ichiroh Takiguchi <takiguc () linux ! vnet ! ibm ! com>
Date:       2018-06-28 13:13:55
Message-ID: eec2e84fff7ef747cb4e80eadbcebedb () linux ! vnet ! ibm ! com
[Download RAW message or body]

Hello.
In my investigation, this issue only happens on 64 bit build only...

On 2018-06-28 06:06, Phil Race wrote:
> On 06/27/2018 06:45 AM, Ichiroh Takiguchi wrote:
>> Hello,
>> 
>> I should post this mail before starting JDK11 RDP1.
> 
> Already too too late for that, but although this looks like a bug -
> and the correct fix -
> the bug has been there forever .. since JDK 1.2  in 1998 !
> That makes it a 20 year old bug, so I don't think we need to treat it 
> as urgent
> for JDK 11.
> 
> -phil.
> 
>> 
>> I found memory leak issue on awt_InputMethod.c.
>> 
>> See src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c.
>> On line 1117, memory area was allocated by malloc(), but free() is 
>> missing
>> ===========================================
>>   1099          if (text->feedback != NULL) {
>>   1100              int cnt;
>>   1101              jint *tmpstyle;
>>   1102
>>   1103              style = (*env)->NewIntArray(env, text->length);
>>   1104              if (JNU_IsNull(env, style)) {
>>   1105                  (*env)->ExceptionClear(env);
>>   1106                  THROW_OUT_OF_MEMORY_ERROR();
>>   1107                  goto finally;
>>   1108              }
>>   1109
>>   1110              if (sizeof(XIMFeedback) == sizeof(jint)) {
>>   1111                  /*
>>   1112                   * Optimization to avoid copying the array
>>   1113                   */
>>   1114                  (*env)->SetIntArrayRegion(env, style, 0,
>>   1115                                            text->length, (jint 
>> *)text->feedback);
>>   1116              } else {
>>   1117                  tmpstyle  = (jint 
>> *)malloc(sizeof(jint)*(text->length));
>>   1118                  if (tmpstyle == (jint *) NULL) {
>>   1119                      THROW_OUT_OF_MEMORY_ERROR();
>>   1120                      goto finally;
>>   1121                  }
>>   1122                  for (cnt = 0; cnt < (int)text->length; cnt++)
>>   1123                          tmpstyle[cnt] = text->feedback[cnt];
>>   1124                  (*env)->SetIntArrayRegion(env, style, 0,
>>   1125                                            text->length, (jint 
>> *)tmpstyle);
>>   1126              }
>>   1127          }
>> ===========================================
>> In my investigation, malloc() was called on RHEL7 x86_64 with Japanese 
>> Input Method.
>> 
>> I'd like to obtain a sponsor for this patch.
>> --------
>> --- old/src/java.desktop/aix/native/libawt_xawt/awt/awt_InputMethod.c 
>> 2018-06-27 02:03:48.134991703 +0900
>> +++ new/src/java.desktop/aix/native/libawt_xawt/awt/awt_InputMethod.c 
>> 2018-06-27 02:03:47.493005265 +0900
>> @@ -1148,6 +1148,7 @@
>>                          tmpstyle[cnt] = text->feedback[cnt];
>>                  (*env)->SetIntArrayRegion(env, style, 0,
>>                                            text->length, (jint 
>> *)tmpstyle);
>> +                free(tmpstyle);
>>              }
>>          }
>>      }
>> --- old/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c 
>>  2018-06-27 02:03:49.040972563 +0900
>> +++ new/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c 
>>  2018-06-27 02:03:48.391986274 +0900
>> @@ -1123,6 +1123,7 @@
>>                          tmpstyle[cnt] = text->feedback[cnt];
>>                  (*env)->SetIntArrayRegion(env, style, 0,
>>                                            text->length, (jint 
>> *)tmpstyle);
>> +                free(tmpstyle);
>>              }
>>          }
>>      }
>> --------
>> 
>> Thanks,
>> Ichiroh Takiguchi
>> IBM Japan, Ltd.
>> 

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic