RFR: JDK-8013736: [launcher] cleanup code for correctness
Kumar Srinivasan
kumar.x.srinivasan at oracle.com
Mon May 6 23:29:59 UTC 2013
Here is the modified webrev:
http://cr.openjdk.java.net/~ksrini/8013736/webrev.1/
delta webrev to the last webrev:
http://cr.openjdk.java.net/~ksrini/8013736/webrev.1/webrev.delta/index.html
I added the do { ..... } while (0) pattern to all the launcher's macro defs,
I also addressed Alan's comments.
I know that the native unpacker uses macros which will need this pattern
I will fix that separately.
Alan, do you want me to search and file bugs on other jdk components ?
Thanks
Kumar
> Oops. Of course, that shouldn't have the trailing semicolon
>
> #define NULL_CHECK_OR_RETURN(ncor_pointer_to_check, \
> ncor_failure_return_value) \
> do { \
> if ((ncor_pointer_to_check) == NULL) { \
> JLI_ReportErrorMessage(JNI_ERROR); \
> return ncor_failure_return_value; \
> } \
> } while(0)
>
>
>
> On Thu, May 2, 2013 at 11:16 AM, Martin Buchholz <martinrb at google.com
> <mailto:martinrb at google.com>> wrote:
>
> What would Martin actually do?
>
> #define NULL_CHECK_OR_RETURN(ncor_pointer_to_check, \
> ncor_failure_return_value) \
> do { \
> if ((ncor_pointer_to_check) == NULL) { \
> JLI_ReportErrorMessage(JNI_ERROR); \
> return ncor_failure_return_value; \
> } \
> } while(0);
>
>
>
>
> On Thu, May 2, 2013 at 10:45 AM, Kumar Srinivasan
> <kumar.x.srinivasan at oracle.com
> <mailto:kumar.x.srinivasan at oracle.com>> wrote:
>
> On 5/2/2013 10:17 AM, Martin Buchholz wrote:
>> This is global fix creep, but ...
>
> :(
>
>
>>
>> these macros are also found in the hotspot sources.
>> I would rewrite all the macros in the jdk to adopt the
>> blessed style
>> do { ... } while(0)
>> and remove all comments in the jdk of the form
>> /* next token must be ; */
>> If you want a macro that does nothing at all, you should
>> define it
>> do {} while (0)
>> instead of defining it to the empty string.
> I am not following, could you be more explicit on how this
> applies to
>
> -#define NULL_CHECK0(e) if ((e) == 0) { \
> +#define NULL_CHECK_RV(e, rv) if ((e) == 0) { \
> JLI_ReportErrorMessage(JNI_ERROR); \
> - return 0; \
> + return rv; \
> }
>
> -#define NULL_CHECK(e) if ((e) == 0) { \
> - JLI_ReportErrorMessage(JNI_ERROR); \
> - return; \
> - }
> +#define NULL_CHECK0(e) NULL_CHECK_RV(e, 0)
>
> +#define NULL_CHECK(e) NULL_CHECK_RV(e, )
> +
>
>
>>
>>
>> I would also be inclined to change
>> == 0
>> to
>> == NULL
>>
>
> Yes will take care of this, as well as Alan suggestion added a
> check for malloc return.
>
>
>> This seems like another occasion to use the weird
>>
>> do { ... } while(0)
>>
>> trick to make the macro behave more like a statement.
>>
>> I might obfuscate the macro parameters to make collisions
>> less likely, e.g. e => N_C_RV_e
>>
>
> You want me to rename the macro parameter e to N_C_RV_e ? or
> something else
> say ncrve to avoid collision ?
>
> Kumar
>
>
>>
>>
>>
>>
>> On Wed, May 1, 2013 at 12:33 PM, Kumar Srinivasan
>> <kumar.x.srinivasan at oracle.com
>> <mailto:kumar.x.srinivasan at oracle.com>> wrote:
>>
>> Hi,
>>
>> Please review simple fixes for code correctness in
>> the launcher.
>>
>> http://cr.openjdk.java.net/~ksrini/8013736/webrev.0/
>> <http://cr.openjdk.java.net/%7Eksrini/8013736/webrev.0/>
>>
>> Thanks
>> Kumar
>>
>>
>>
>
>
>
More information about the core-libs-dev
mailing list