RFR(XS): 8215009: GCC 8 compilation eror in libjli

Dmitry Chuyko dmitry.chuyko at bell-sw.com
Thu Feb 21 17:55:56 UTC 2019


To me thread function wrappers look preferable to platform specific 
JavaMain signature. Consider this webrev with wrappers:

http://cr.openjdk.java.net/~dchuyko/8215009/webrev.01/

In some cases JavaMain is called in the same thread and its result is 
returned from JLI_Launch. ContinueInNewThread is in shared code. And 
JavaMain uses macro controlled returns.
So when JavaMain returns THREAD_FUNC_RETURN changes may contain some 
quite artificial macro parts in java.c:

http://cr.openjdk.java.net/~dchuyko/8215009/webrev.02/

-Dmitry

On 12/19/18 9:27 AM, David Holmes wrote:
> On 19/12/2018 1:56 am, Dmitry Chuyko wrote:
>> On 12/18/18 3:39 AM, David Holmes wrote:
>>> On 11/12/2018 9:30 pm, Dmitry Chuyko wrote:
>>>> On 12/11/18 4:03 AM, David Holmes wrote:
>>>>> Hi Dmitry,
>>>>>
>>>>> On 11/12/2018 12:16 am, Dmitry Chuyko wrote:
>>>>>> Hello,
>>>>>>
>>>>>> Please review a small fix in java_md_solinux.c: continuation is 
>>>>>> not truly compatible with pthread_create start_routine's 
>>>>>> signature but we control what actually happens. So it makes sense 
>>>>>> to add intermediate void* cast to silence the error.
>>>>>
>>>>> I'd be tempted to fix the signature and get rid of all the casts.
>>>>
>>>> David, the signature is a signature of
>>>>
>>>> int JNICALL JavaMain(void * _args)
>>>>
>>>> It would be fun to change it. But still on Windows it is correctly 
>>>> passed to _beginthreadex() and then return code is extracted with 
>>>> GetExitCodeThread(). In case we want it to return void* the cast 
>>>> will move there.
>>>
>>> I think the current double cast is truly ugly and an ifdef for 
>>> windows, or a cast for Windows only would be an improvement.
>>
>> I agree. Maybe making a wrapper function is not so ugly. If there are 
>> no objections to changing beginning of the call stack it is quite 
>> easy to implement. For consistency it may be done for all 3 points 
>> (posix unix, posix mac, windows) or just for posix ones.
>>
>> It looks like ifdef should be better as long as there are already 
>> OS-specific parts in libjli. Again, if there are no objections to 
>> have different JavaMain signatures on different platforms. In this 
>> case there won't be a signature cast for Windows.
>
> How about setting
>
> #define THREAD_FUNC_RETURN int
>
> in windows/java_md.h.
>
> Then:
>
> #ifndef THREAD_FUNC_RETURN
>   #define THREAD_FUNC_RETURN void*
> #endif
>
> in java.h (after the other includes).
>
> Then:
>
> THREAD_FUNC_RETURN JNICALL
> JavaMain(void * _args)
>
> in java.c.
>
> ?
>
> Cheers,
> David
>
>
>>
>> -Dmitry
>>
>>>
>>> But I won't impose that on you just to silence gcc 8.
>>>
>>> Cheers,
>>> David
>>>
>>>> -Dmitry
>>>>
>>>>>
>>>>> Cheers,
>>>>> David
>>>>>
>>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8215009
>>>>>> webrev: http://cr.openjdk.java.net/~dchuyko/8215009/webrev.00/
>>>>>> testing: submit repo 
>>>>>> (mach5-one-dchuyko-JDK-8215009-20181207-1625-13615: PASSED)
>>>>>>
>>>>>> -Dmitry
>>>>>>


More information about the core-libs-dev mailing list