Hi Thomas,

On 26/03/2019 14:41, Thomas Stüfe wrote:
Hi Alexey,



On Tue, Mar 26, 2019 at 2:36 PM Alexey Ivanov <alexey.iva...@oracle.com <mailto:alexey.iva...@oracle.com>> wrote:

    Hi Thomas,

    Looks good, I'm not a reviewer though.
    Could I also ask you to push this changeset to jdk/client [1]
    instead of
    jdk/jdk?

    A small question: two prototypes are changed in debug_trace.h but
    only
    one is updated in debug_trace.c. Is it because the functions matching
    the second prototype have already been updated with JNICALL?


Not really sure I understand the question. There is no real 1:1 relationship between my change in .h and .c:

I mean there are two prototypes in the header:
1. typedef void (JNICALL *DTRACE_OUTPUT_CALLBACK)(const char * msg);
2. typedef void (JNICALL *DTRACE_PRINT_CALLBACK)(const char * file, int line, int argc, const char * fmt, va_list arglist);

1. In C, only the first one is updated:
static void JNICALL DTrace_PrintStdErr(const char *msg);
which corresponds to the first case. This shouldn't have caused build failure because the declarations in .h and .c matched.

2. I believe DTrace_VPrintln and DTrace_VPrint are the callbacks for the 2nd prototype of DTRACE_PRINT_CALLBACK. They're received JNICALL under JDK-8214120 but the header hasn't been updated. This caused the build failure.

The prevent the build failure, it would be enough to update the 2nd declaration in the header. (Or alternatively, drop JNICALL from DTrace_VPrintln and DTrace_VPrint in .c file.)
For consistency, you're updating the 1st declaration as well.


DTRACE_PRINTxx macros call _DTrace_Template() which expands to DTrace_PrintFunction(). First argument is pointer to DTrace_VPrint(), which is a function decorated with JNICALL. Hence the build error - the type of the first argument of DTrace_PrintFunction is DTRACE_PRINT_CALLBACK, which is a fkt pointer *without* JNICALL.

So one way to fix this was to correct the DTRACE_PRINT_CALLBACK type to be a fkt pointer pointing to a JNICALL decorated function.

That means that I also needed to fix all functions whose pointers are being passed around as DTRACE_PRINT_CALLBACK. But there only was one I saw, DTrace_PrintStdErr().

From the above, it looks this isn't necessary as DTrace_PrintStdErr() is of type DTRACE_OUTPUT_CALLBACK.

However, I think it's better to have both DTRACE_OUTPUT_CALLBACK and DTRACE_PRINT_CALLBACK consistent: either with JNICALL or without.


Looks fine to me!

I'll push to jdk/client. Will that be transported to jdk/jdk automatically?

Yes, it will.
Although I'm not sure how often they're synced.

Regards,
Alexey


Cheers, Thomas


    Regards,
    Alexey

    [1] http://hg.openjdk.java.net/jdk/client/

    On 25/03/2019 13:09, Thomas Stüfe wrote:
    > Hi all,
    >
    > Issue: https://bugs.openjdk.java.net/browse/JDK-8221405
    > cr:
    >
    
http://cr.openjdk.java.net/~stuefe/webrevs/8221405-windows32-awt-buildfixes/webrev.00/webrev/
    >
    > On 32bit windows, awt build did bitrot. Dtrace print callbacks
    need to
    > be declared with __stdcall. No other platform cares.
    >
    > Thanks, Thomas


Reply via email to