RFR: JDK-8320405: [Windows Server 2016] java/awt/image/MultiResolutionImage/MultiResolutionImageObserverTest.java shows issues in awt_Win32GraphicsDevice.cpp
Matthias Baesken
mbaesken at openjdk.org
Wed Jan 3 08:18:39 UTC 2024
On Tue, 2 Jan 2024 19:33:44 GMT, Alexey Ivanov <aivanov at openjdk.org> wrote:
>> When running with fastdebug binaries we run intermittent into the issue below in
>> jtreg test java/awt/image/MultiResolutionImage/MultiResolutionImageObserverTest.java .
>> Seems we miss checking of successful HBITMAP creation before calling GetDIBits.
>>
>> HDC hBMDC = this->GetDC();
>> HBITMAP hBM = ::CreateCompatibleBitmap(hBMDC, 1, 1);
>> VERIFY(::GetDIBits(hBMDC, hBM, 0, 1, NULL, gpBitmapInfo, DIB_RGB_COLORS));
>>
>> in awt_Win32GraphicsDevice.cpp . Thats why the releast of hBMDC / hBM fails as well at the end of the function causing the seond and third warning.
>>
>>
>> Sat Nov 18 17:29:23 CET 2023
>>
>> *********************
>> AWT Assertion Failure
>> *********************
>> ::GetDIBits(hBMDC, hBM, 0, 1, 0, gpBitmapInfo, 0)
>> File 'e:\openjdk\openjdk-21u-windows_x86_64-dbg\jdk\src\java.desktop\windows\native\libawt\windows\awt_Win32GraphicsDevice.cpp', at line 184
>> GetLastError() is 57 : The parameter is incorrect.
>>
>> Do you want to break into the debugger?
>> *********************
>> *********************
>> AWT Assertion Failure
>> *********************
>> ::DeleteObject(hBM)
>> File 'e:\openjdk\openjdk-21u-windows_x86_64-dbg\jdk\src\java.desktop\windows\native\libawt\windows\awt_Win32GraphicsDevice.cpp', at line 297
>> GetLastError() is 57 : The parameter is incorrect.
>>
>> So it seems, we should have some additional checks/tracing.
>
> src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsDevice.cpp line 142:
>
>> 140: } else {
>> 141: J2dTraceLn1(J2D_TRACE_WARNING,
>> 142: "CreateDC failed, so we cannot store the DC for later usage, mieInfo.szDevice is %S",
>
> Is `%S` a valid format string? It should in lower case: `%s`.
>
> It seems, “store the DC for later usage” is misleading, it isn't stored… at least for a long period of time.
https://learn.microsoft.com/en-us/cpp/c-runtime-library/format-specification-syntax-printf-and-wprintf-functions?view=msvc-170
The %S is for wide chars, do you think we need the other one (%s) ?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/17197#discussion_r1440174314
More information about the client-libs-dev
mailing list