RFR: JDK-8320405: [Windows Server 2016] java/awt/image/MultiResolutionImage/MultiResolutionImageObserverTest.java shows issues in awt_Win32GraphicsDevice.cpp [v3]
Christoph Langer
clanger at openjdk.org
Wed Jan 24 16:59:30 UTC 2024
On Thu, 11 Jan 2024 16:52:40 GMT, Matthias Baesken <mbaesken 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.
>
> Matthias Baesken has updated the pull request incrementally with one additional commit since the last revision:
>
> do not call CreateCompatibleBitmap if hBMDC is NULL, do not call GetDIBits if hBM is NULL
I have closed [JDK-8320405](https://bugs.openjdk.org/browse/JDK-8320405) as it does not match the synopsis of the issue addressed here. [JDK-8185862](https://bugs.openjdk.org/browse/JDK-8185862) is a better fit. I suggest to also close this PR and reboot on [JDK-8185862](https://bugs.openjdk.org/browse/JDK-8185862).
Technically, I agree, if `hBMDC` is NULL, we should return right away. However, the question is, how critical such a situation is. I think we need an understanding about the environment in which that can happen and whether we can accept it without assertions.
E.g. what it means when mieInfo.szDevice=`WinDisc` in a call to `HDC hDC = CreateDC(mieInfo.szDevice, NULL, NULL, NULL); ` which obviously yields NULL for hDC.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/17197#issuecomment-1908545443
More information about the client-libs-dev
mailing list