RFR(M): 8038201: Clean up misleading usage of malloc() in init_system_properties_values()
Dmitry Samersoff
dmitry.samersoff at oracle.com
Tue Mar 25 10:11:54 UTC 2014
Goetz,
os_aix.cpp: 565
It might be better to allocate one buffer that satisfy all three
sprintf() calls at ll. 556 and free it at ll. 574
os_bsd.cpp: 350
I would prefer to have the single #ifdef __APPLE__ block, it makes
code much more readable.
os_bsd.cpp: 485
you replace malloc to on-stack allocation of more than 4096 bytes. I
think this allocation should be done through NEW_C_HEAP_ARRAY.
see also comments to os_aix above - you can allocate large enough
buffer once and than reuse it.
os_linux.cpp: 434
the same comments as above.
os_solaris.cpp: 728
As soon as you doing cleanup, I would love to have this code changed
a bit. It comes from solaris man page long time ago and doesn't respect
hotspot convention of using underscore to indicate class global variables.
Could you change it to something like:
Dl_serinfo info_sz, *info;
if (dlinfo(RTLD_SELF, RTLD_DI_SERINFOSIZE, (void *)&info_sz) == -1) {
...
info = (Dl_serinfo*)NEW_C_HEAP_ARRAY(char, info_sz.dls_size, mtInternal);
...
os_solaris.cpp: 829
The same comment about on-stack allocation as for os_bsd.cpp
-Dmitry
On 2014-03-25 01:50, Lindenmaier, Goetz wrote:
> Hi,
>
> please review and test this change. I please need a sponsor.
> http://cr.openjdk.java.net/~goetz/webrevs/8038201-sec/webrev.00/
>
> This change addresses the implementation of init_system_properties_values
> on aix, linux, solaris and bsd.
> In init_system_properties_values a macro was defined mapping malloc to
> NEW_C_HEAP_ARRAY. NEW_C_HEAP_ARRAY checks for successful allocation
> or exits the VM. The code of this method handles the allocated pointers as
> allocated with real malloc, i.e., there were checks for NULL and calls to free().
>
> This change replaces the macro malloc with NEW_C_HEAP_ARRAY and removes
> the unnecessary checks making the code clearer. Also, it uses a local array where
> possible.
>
> The allocated memory is passed to calls that end up at SystemProperty::set_value().
> set_value copies the strings passed. Thus the memory allocated in
> init_system_properties_values must be freed after these calls. Most of these
> frees were missing.
>
> This change adds the missing frees.
>
> Testing this change I ran into a warning in ppc code which I fixed, too.
> I did some local test. I'll get broader tests by Wednesday.
>
> Best regards,
> Goetz.
>
>
--
Dmitry Samersoff
Oracle Java development team, Saint Petersburg, Russia
* I would love to change the world, but they won't give me the source code.
More information about the ppc-aix-port-dev
mailing list