Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8283060: RawNativeLibraries should allow multiple clients to load/unload the same library #8022

Closed
wants to merge 1 commit into from

Conversation

mlchung
Copy link
Member

@mlchung mlchung commented Mar 29, 2022

A small improvement to RawNativeLibraries. RawNativeLibraries::load returns the same NativeLibrary instance of a given path if it's called multiple times. This means that multiple clients have to coordinate that the last one using the loaded library is the one to close the library by calling RawNativeLibraries::unload; otherwise, an exception may be thrown.

This patch changes RawNativeLibraries::load to delegate to the underlying platform-specific library loading mechanism e.g. dlopen/dlclose that keeps the reference count. So each call to RawNativeLibraries::load and unload is simply a call to dlopen and dlclose respectively. Each client of calling RawNativeLibraries::load is responsible for calling RawNativeLibraries::unload. This will be consistent with the current behavior when you call load and unload with a different RawNativeLibraries instance.


Progress

  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue
  • Change must be properly reviewed

Issue

  • JDK-8283060: RawNativeLibraries should allow multiple clients to load/unload the same library

Reviewers

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.java.net/jdk pull/8022/head:pull/8022
$ git checkout pull/8022

Update a local copy of the PR:
$ git checkout pull/8022
$ git pull https://git.openjdk.java.net/jdk pull/8022/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 8022

View PR using the GUI difftool:
$ git pr show -t 8022

Using diff file

Download this PR as a diff file:
https://git.openjdk.java.net/jdk/pull/8022.diff

@bridgekeeper
Copy link

@bridgekeeper bridgekeeper bot commented Mar 29, 2022

👋 Welcome back mchung! A progress list of the required criteria for merging this PR into master will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@openjdk openjdk bot added the rfr label Mar 29, 2022
@openjdk
Copy link

@openjdk openjdk bot commented Mar 29, 2022

@mlchung The following label will be automatically applied to this pull request:

  • core-libs

When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing list. If you would like to change these labels, use the /label pull request command.

@openjdk openjdk bot added the core-libs label Mar 29, 2022
@mlbridge
Copy link

@mlbridge mlbridge bot commented Mar 29, 2022

Webrevs

Copy link
Member

@sundararajana sundararajana left a comment

LGTM

@openjdk
Copy link

@openjdk openjdk bot commented Mar 30, 2022

@mlchung This change now passes all automated pre-integration checks.

ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details.

After integration, the commit message for the final commit will be:

8283060: RawNativeLibraries should allow multiple clients to load/unload the same library

Reviewed-by: sundar, jvernee, jpai

You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed.

At the time when this comment was updated there had been 103 new commits pushed to the master branch:

As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details.

➡️ To integrate this PR with the above commit message to the master branch, type /integrate in a new comment.

@openjdk openjdk bot added the ready label Mar 30, 2022
@@ -45,7 +45,7 @@
* 3. No relationship with class loaders.
*/
public final class RawNativeLibraries {
final Map<String, RawNativeLibraryImpl> libraries = new ConcurrentHashMap<>();
final Set<RawNativeLibraryImpl> libraries = ConcurrentHashMap.newKeySet();
final Class<?> caller;
Copy link
Member

@jaikiran jaikiran Mar 30, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello Mandy,
Apart from the caller being used for checks while constructing a RawNativeLibraries in RawNativeLibraries.newInstance(MethodHandles.Lookup trustedCaller), I don't see this instance member being used anywhere. Do you think we need to store this as an instance member?

Copy link
Member Author

@mlchung mlchung Mar 30, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I keep it as a record and for debugging use in case.

@mlchung
Copy link
Member Author

@mlchung mlchung commented Mar 31, 2022

/integrate

@openjdk
Copy link

@openjdk openjdk bot commented Mar 31, 2022

Going to push as commit 1ddab6f.
Since your change was applied there have been 104 commits pushed to the master branch:

  • 835c7e8: 8283907: Fix Huawei copyright in various files
  • b8dd21b: 8283801: Cleanup confusing String.toString calls
  • ce27d9d: 8283494: Factor out calculation of actual number of XMM registers
  • e61ccfb: 8283470: Update java.lang.invoke.VarHandle to use sealed classes
  • e85fa2f: 8283700: Add final or sealed modifier to appropriate java.awt API classes
  • ec9ab55: 8282374: Java_sun_awt_X11_XlibWrapper_XSynchronize is wrong and unused
  • a625bfd: 8283903: GetContainerCpuLoad does not return the correct result in share mode
  • 97c7298: 8282046: Create a regression test for JDK-8000326
  • ae57258: 8283715: Update ObjectStreamClass to be final
  • d9d19e9: 8284015: ProblemList containers/docker/TestJcmd.java on linux-x64
  • ... and 94 more: https://git.openjdk.java.net/jdk/compare/3e73a0b726a97df0a4e92f9cf917429346090f45...master

Your commit was automatically rebased without conflicts.

@openjdk openjdk bot added the integrated label Mar 31, 2022
@openjdk openjdk bot closed this Mar 31, 2022
@openjdk openjdk bot removed ready rfr labels Mar 31, 2022
@openjdk
Copy link

@openjdk openjdk bot commented Mar 31, 2022

@mlchung Pushed as commit 1ddab6f.

💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
core-libs integrated
4 participants