RFR 8139507: WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs
Jan Lahoda
jan.lahoda at oracle.com
Fri Jun 10 16:05:39 UTC 2016
Hi Alan,
Thanks for the comment, an answer is inlined.
On 10.6.2016 12:20, Alan Bateman wrote:
> On 08/06/2016 18:39, Jan Lahoda wrote:
>
>> Hello,
>>
>> When starting JShell on Windows, one may see a message like this:
>>
>> ?vn 08, 2016 6:46:35 ODP. java.util.prefs.WindowsPreferences <init>
>> WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs
>> at root 0 x80000002. Windows RegCreateKeyEx(...) returned error code 5.
>>
>> The problem, as far as I can understand, is that when the JShell tool
>> asks for the user Preferences (Preferences.userRoot()), not only the
>> user preferences get created, but also the system preferences get
>> created. And when the given (system) root node cannot be created (e.g.
>> due to permissions), the above warning is printed.
>>
>> As JShell does not need system Preferences, I don't think this warning
>> does not make much sense in the JShell context. My proposal is to
>> create both the user and system Preferences lazily on Windows, so
>> applications that only need user Preferences don't trigger the
>> warning. As far as I can tell, this is consistent with what the
>> FileSystemPreferences do:
>> http://hg.openjdk.java.net/jdk9/dev/jdk/file/7f5b7acebffd/src/java.prefs/unix/classes/java/util/prefs/FileSystemPreferences.java#l160
>>
>>
>> Bugs:
>> https://bugs.openjdk.java.net/browse/JDK-8139507
>> https://bugs.openjdk.java.net/browse/JDK-8158292
>>
>> Webrev:
>> http://cr.openjdk.java.net/~jlahoda/8139507/webrev.00/
>>
>> Not sure if there's a way to write a test for the behavior, I didn't
>> see an obvious way. Any suggestions on testing would be welcome!
>>
> I don't know if the prefs APIs is used much but I assume it would be
> better to not synchronized on the class and instead do something like:
The other Preferences implementations used this pattern, so I used it as
well. I don't have a problem with using double-checked locking. Updated
webrev:
http://cr.openjdk.java.net/~jlahoda/8139507/webrev.01
(updates all the Preferences implementations, to remain consistent.)
Jan
>
> static volatile Preferences userRoot;
>
> static Preferences getUserRoot() {
> Preferences root = userRoot;
> if (root == null) {
> synchronized (Preferences.class) {
> root = userRoot;
> if (root == null) {
> userRoot = root = new
> WindowsPreferences(USER_ROOT_NATIVE_HANDLE,
> WINDOWS_ROOT_PATH);
> }
> }
> }
> return root;
> }
>
> I'm not sure that a test is possible for the scenario as it would be too
> fragile/dependent on whether the user running the test has privileges or
> not.
>
> -Alan
More information about the core-libs-dev
mailing list