On Tue, 7 Jan 2025 09:56:11 GMT, Julian Waters <[email protected]> wrote:
>> After 8339120, gcc began catching many different instances of unused code in
>> the Windows specific codebase. Some of these seem to be bugs. I've taken the
>> effort to mark out all the relevant globals and locals that trigger the
>> unused warnings and addressed all of them by commenting out the code as
>> appropriate. I am confident that in many cases this simplistic approach of
>> commenting out code does not fix the underlying issue, and the warning
>> actually found a bug that should be fixed. In these instances, I will be
>> aiming to fix these bugs with help from reviewers, so I recommend anyone
>> reviewing who knows more about the code than I do to see whether there is
>> indeed a bug that needs fixing in a different way than what I did
>>
>> build.log on release configuration:
>>
>> C:/users/vertig0/downloads/eclipse-committers-2023-12-r-win32-x86_64/workspace/jdk/src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp:
>> In function 'int regEnable()':
>> C:/users/vertig0/downloads/eclipse-committers-2023-12-r-win32-x86_64/workspace/jdk/src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp:334:14:
>> warning: unused variable 'freeData' [-Wunused-variable]
>> 334 | bool freeData = false;
>> | ^~~~~~~~
>> C:/users/vertig0/downloads/eclipse-committers-2023-12-r-win32-x86_64/workspace/jdk/src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp:326:11:
>> warning: unused variable 'retval' [-Wunused-variable]
>> 326 | DWORD retval = -1;
>> | ^~~~~~
>> C:/users/vertig0/downloads/eclipse-committers-2023-12-r-win32-x86_64/workspace/jdk/src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp:
>> In function 'int regDeleteValue(HKEY, LPCWSTR)':
>> C:/users/vertig0/downloads/eclipse-committers-2023-12-r-win32-x86_64/workspace/jdk/src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp:379:14:
>> warning: unused variable 'freeData' [-Wunused-variable]
>> 379 | bool freeData = false;
>> | ^~~~~~~~
>> C:/users/vertig0/downloads/eclipse-committers-2023-12-r-win32-x86_64/workspace/jdk/src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp:367:11:
>> warning: unused variable 'retval' [-Wunused-variable]
>> 367 | DWORD retval = -1;
>> | ^~~~~~
>> C:/users/vertig0/downloads/eclipse-committers-2023-12-r-win32-x86_64/workspace/jdk/src/jdk.accessibility/windows/native/bridge/AccessBridgeCalls.c:
>> In function 'shutdownAccessBridge':
>> C:/users/vertig0/downloads/eclipse-committers-2023-12-r-win3...
>
> Julian Waters has updated the pull request with a new target base due to a
> merge or a rebase. The pull request now contains eight commits:
>
> - Merge branch 'openjdk:master' into accessibility
> - Cast to void in AccessBridgeCalls.c
> - static_cast to void in jaccessinspector.cpp
> - Formatting changes in AccessBridgeEventHandler.cpp
> - Merge branch 'master' into accessibility
> - Remove now unused result
> - Merge branch 'master' into accessibility
> - 8342870
I haven't looked at all the files, yet I'm posting my comments right away for
discussion.
src/jdk.accessibility/windows/native/bridge/AccessBridgeCalls.c line 230:
> 228: if (result != TRUE) {
> 229: error = GetLastError();
> 230: }
The comparison above should be `if (result == 0)` instead of `TRUE`, because
[`FreeLibrary`](https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-freelibrary)
returns non-zero if the function succeeds, which implies the return value
could be different from 1 (`TRUE`).
src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp line 334:
> 332: TCHAR dataBuffer[DEFAULT_ALLOC];
> 333: TCHAR *data = dataBuffer;
> 334: // bool freeData = false;
This should be set to `true` if `data` is reallocated, otherwise both
`regEnable` and `regDeleteValue` leak `data`.
https://github.com/openjdk/jdk/blob/4a9fba615da0dfa6646ecb9fd9d929f74fe6875e/src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp#L336-L341
In fact, the above statement should probably be removed — the following code
uses only `dataBuffer` which does not contain any data if the buffer was
dynamically allocated and assigned to `data`.
src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp line 364:
> 362: }
> 363:
> 364: int regDeleteValue(HKEY hFamilyKey, LPCWSTR lpSubKey)
There's one more memory leak:
https://github.com/openjdk/jdk/blob/4a9fba615da0dfa6646ecb9fd9d929f74fe6875e/src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp#L352
The `delete[]` operator must be called on `newStr`.
It's present in both `regEnable` and `regDeleteValue`.
src/jdk.accessibility/windows/native/jaccessinspector/jaccessinspector.cpp line
1212:
> 1210: }
> 1211:
> 1212: static_cast<void>(lastError);
This falls into category that's useful for debugging only. The value of
`lastError` is never used to report an error, yet one can use a debugger to
inspect the value.
There seems to be no way to report or log the error.
Isn't it better to add a flag to suppress the warning? Casting `lastError` to
`void` is cryptic. A comment would definitely be helpful here.
src/jdk.accessibility/windows/native/jaccesswalker/jaccesswalker.cpp line 261:
> 259: GetClientRect(hWnd, &rcClient);
> 260: // hwndEdit =
> 261: CreateWindow("Edit",
The edit control is created visible and it's resized to cover the entire client
area.
The edit control is used… the text is updated in the [`displayAndLog`
function](https://github.com/openjdk/jdk/blob/c38417a86e27f047715cfd9a98770387d994a512/src/jdk.accessibility/windows/native/toolscommon/AccessInfo.cpp#L60).
Since the edit control is a child window, it's automatically destroyed when the
parent window is destroyed.
Therefore, there's no reason to store the handle in a variable, and I suggest
removing the `hwndEdit` variable.
Moreover, the comment for `hwndEdit`—`// handle of tree-view control`—is
confusing because it doesn't store a handle to a TreeView control.
src/jdk.accessibility/windows/native/jaccesswalker/jaccesswalker.cpp line 561:
> 559: tvis.item = tvi;
> 560:
> 561: /* HTREEITEM treeNodeItem = */ TreeView_InsertItem(treeWnd,
> &tvis);
Since it's unused, I'd rather remove the variable altogether.
Does the handle have any other usage except for checking whether an error
occurred?
-------------
PR Review: https://git.openjdk.org/jdk/pull/21656#pullrequestreview-2564668085
PR Review Comment: https://git.openjdk.org/jdk/pull/21656#discussion_r1924375318
PR Review Comment: https://git.openjdk.org/jdk/pull/21656#discussion_r1923750005
PR Review Comment: https://git.openjdk.org/jdk/pull/21656#discussion_r1923752261
PR Review Comment: https://git.openjdk.org/jdk/pull/21656#discussion_r1923774492
PR Review Comment: https://git.openjdk.org/jdk/pull/21656#discussion_r1923839914
PR Review Comment: https://git.openjdk.org/jdk/pull/21656#discussion_r1923849086