RFR: 8301846: Invalid TargetDataLine after screen lock when using JFileChooser or COM library [v3]
Alexey Ivanov
aivanov at openjdk.org
Mon Jul 24 10:00:46 UTC 2023
On Thu, 20 Jul 2023 03:39:03 GMT, Renjith Kannath Pariyangad <duke at openjdk.org> wrote:
>> Hi Reviewers,
>>
>> Observations :
>> 1. Without com initialize if we access Mixer for recording, library loaded invalid GUID and clipped description in windows(ID not found in registry). With com initialization library load proper GUID (same as registry).
>> 2. For Play back device always loading proper device GUID irrespective of com Initialization.
>>
>> Test:
>> Since screen lock and unlock workflow required for reproducing this issue, did coupe of iteration of manual testing post fix and confirmed its resolving the problem.
>> To reconfirm nothing is broken, executed all audio related test cases on test bench post fix and all are green.
>>
>> Please review the changes and let me know your comments if any.
>>
>> Regards,
>> Renjith.
>
> Renjith Kannath Pariyangad has updated the pull request incrementally with one additional commit since the last revision:
>
> Disabled OLE1 from CoInit
src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_DirectSound.cpp line 482:
> 480: DWORD WINAPI __stdcall DS_StartBufferHelper::ThreadProc(void *param)
> 481: {
> 482: ::CoInitializeEx(NULL, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE);
You're changing the COM for this thread from `COINIT_APARTMENTTHREADED` to `COINIT_MULTITHREADED`.
Do DirectSound objects support multi-threading? I couldn't find anything quickly.
A Microsoft sample for [Creating the Device Object](https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ee416365(v=vs.85)) uses `CoInitializeEx(NULL, 0)`.
The documentation for [`CoInitializeEx`](https://learn.microsoft.com/en-us/windows/win32/api/combaseapi/nf-combaseapi-coinitializeex) says, “You need to initialize the COM library on a thread before you call any of the library functions…”
This implies that any thread which creates DirectSound objects must initialise COM first. I can't see it happening. Do I miss anything?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/14898#discussion_r1272027291
More information about the client-libs-dev
mailing list