Re: RFR: 5049299 - (process) Use,posix_spawn, not fork, on S10 to avoid swap,exhaustion (jdk7u-dev)
On 08/11/2013 00:39, David Holmes wrote: And linux? It has changed to vfork right? So OSX has changed, linux has changed, but Solaris remains as-is. All platforms allow selecting the mechanism via the property jdk.lang.Process.launchMechanism The only change is OSX where the default switches from fork to posix_spawn. No change to the default on Solaris or Linux. -Alan.
hg: jdk8/tl/jdk: 8027752: sun/tools/jstatd/TestJstatdExternalRegistry.java: java.lang.SecurityException: attempt to add a Permission to a readonly Permissions object
Changeset: 8a4405fb40ba Author:ykantser Date: 2013-11-07 16:55 +0100 URL: http://hg.openjdk.java.net/jdk8/tl/jdk/rev/8a4405fb40ba 8027752: sun/tools/jstatd/TestJstatdExternalRegistry.java: java.lang.SecurityException: attempt to add a Permission to a readonly Permissions object Reviewed-by: sla, jbachorik ! test/sun/tools/jstatd/JstatdTest.java
Re: RFR for JDK-8019502 some java.util test does not pass VM options when launching java program in script
On 08/11/2013 03:41, Patrick Zhang wrote: Sorry, I have some problems to connect to cr.openjdk.java.net yesterday. Now the webrev and result are attached. Please help to review. After checking the scripts in java.util, most of scripts have been finished in 8003890. So the webrev only change 2 rest files. webrev: http://cr.openjdk.java.net/~pzhang/8019502/webrev/ result: http://cr.openjdk.java.net/~pzhang/8019502/GenericTimeZoneNamesTest.jtr http://cr.openjdk.java.net/~pzhang/8019502/NarrowNamesTest.jtr cc'ing i18n-dev as that is where Calendar (and its tests) are maintained. The change look okay to me but I wonder if perhaps you have the wrong bug number. JDK-8019502 is a confused bug but I think it was originally intended to be an audit of the tests that use Runtime.exec or ProcessBuilder to see if they should be changed to pass the options through. I just mention it as I suspect you might need to create a new bug for this and then split up JDK-8019502 into other tasks. -Alan
RE: 8028027: serialver should emit declaration with the 'private' modifier
Hi Stuart, Unfortunately, several Java SE interfaces have public SVUIDs, so the fix can cause confusion: $ serialver java.security.PublicKey java.security.PublicKey:private static final long serialVersionUID = 7187392471159151072L; $ javap java.security.PublicKey Compiled from PublicKey.java public interface java.security.PublicKey extends java.security.Key { public static final long serialVersionUID; } Thanks, -Yuri -Original Message- From: core-libs-dev-boun...@openjdk.java.net [mailto:core-libs-dev-boun...@openjdk.java.net] On Behalf Of Stuart Marks Sent: Friday, November 8, 2013 7:03 AM To: core-libs-dev Subject: RFR: 8028027: serialver should emit declaration with the 'private' modifier Hi all, Please review this quick one-liner to change the serialver tool so that it emits a serialVersionUID declaration with the 'private' modifier, which comports with the recommendation in the java.io.Serializable page. Bug: https://bugs.openjdk.java.net/browse/JDK-8028027 Patch appended below. Thanks, s'marks -- # HG changeset patch # User smarks # Date 1383868023 28800 # Node ID 1e1088bfea50d7d3cc7cfdce2b0085b7adc6a180 # Parent f18b60bd22a1be988d329960c46d504f4b75000f 8028027: serialver should emit declaration with the 'private' modifier Reviewed-by: XXX diff -r f18b60bd22a1 -r 1e1088bfea50 src/share/classes/sun/tools/serialver/SerialVer.java --- a/src/share/classes/sun/tools/serialver/SerialVer.java Thu Nov 07 15:45:21 2013 -0800 +++ b/src/share/classes/sun/tools/serialver/SerialVer.java Thu Nov 07 15:47:03 2013 -0800 @@ -211,7 +211,7 @@ Class? cl = Class.forName(classname, false, loader); ObjectStreamClass desc = ObjectStreamClass.lookup(cl); if (desc != null) { -return static final long serialVersionUID = + +return private static final long serialVersionUID = + desc.getSerialVersionUID() + L;; } else { return null;
Re: RFR for JDK-8019502 some java.util test does not pass VM options when launching java program in script
Hi Alan, I have created https://bugs.openjdk.java.net/browse/JDK-8028044 to hold it. Regards Patrick On 11/8/13 5:24 PM, Alan Bateman wrote: On 08/11/2013 03:41, Patrick Zhang wrote: Sorry, I have some problems to connect to cr.openjdk.java.net yesterday. Now the webrev and result are attached. Please help to review. After checking the scripts in java.util, most of scripts have been finished in 8003890. So the webrev only change 2 rest files. webrev: http://cr.openjdk.java.net/~pzhang/8019502/webrev/ result: http://cr.openjdk.java.net/~pzhang/8019502/GenericTimeZoneNamesTest.jtr http://cr.openjdk.java.net/~pzhang/8019502/NarrowNamesTest.jtr cc'ing i18n-dev as that is where Calendar (and its tests) are maintained. The change look okay to me but I wonder if perhaps you have the wrong bug number. JDK-8019502 is a confused bug but I think it was originally intended to be an audit of the tests that use Runtime.exec or ProcessBuilder to see if they should be changed to pass the options through. I just mention it as I suspect you might need to create a new bug for this and then split up JDK-8019502 into other tasks. -Alan
Re: RFR for JDK-7190106 RMI benchmark fails intermittently because of use of fixed port
/Thank you, Stuart There is one review point I want to ask you opinion. Which is the reason that I moved from test/java/rmi/reliability/benchmark/bench/rmi to test/java/rmi/reliability/benchmark is Main.java need access class TestLibrary for supporting random port. TestLibrary is a unpackage class, I couldn't find a way to let a class which has Package to access the class without package. Do you have suggestion on that? Thank you so much. Tristan On 11/06/2013 09:50 AM, Stuart Marks wrote: / / / / On 11/1/13 9:18 AM, Tristan Yan wrote: / /Hi Everyone http://cr.openjdk.java.net/~pzhang/Tristan/7190106/webrev/ / / Description: 1. Convert shell script test to Java program test. 2. Using random server port by reusing Darryl Mocek's work to replace fixed server port. 3. Using java Process class to start client process. 4. Also convert other shell script test runSerialBench.sh to java program test also / / Hi Tristan, / / Several comments on this webrev. / / / / ** The original arrangement within the test/java/rmi/reliability/benchmark directory had the main benchmark files (scripts) at the top, some benchmark framework files in the bench subdirectory, and the actual RMI and serialization benchmarks in bench/rmi and bench/serial subdirectories. / / The webrev moves all the RMI benchmarks to the top benchmark directory but leaves the serial benchmarks in bench/serial. The RMI benchmarks are now all cluttering the top directory, but the main serial benchmark test is now buried in the bench/serial directory. The nice organization that was there before is now spoiled. Is this rearrangement necessary in order to convert the scripts to Java? I would prefer the original arrangement be left in place. / / / / ** The RMI benchmark Main.java file has a @run tag of the form, / / @run main/othervm/policy=policy.all/timeout=1800 -server Main -c config / / There is a subtle but serious problem here: the -server option is passed to the JVM and not as an argument to the main() method. The main() method gets neither a -server nor a -client argument, so its default run mode as defined by the benchmark itself is SAMEVM. This runs the client and server in the same JVM, which is different from the shell script, which ran separate client and server JVMs. / / / / ** The logic to process the -server argument still expects to take a port, even though the port is assigned automatically. So the obvious fix to the above, / / @run main/othervm/policy=policy.all/timeout=1800 Main -server -c config / / doesn't work, since a port is missing. The logic to increment the argument index to collect the port argument should be removed. Also, the -server line should be restored to the usage message, but without the port argument. / / / / ** After this is done, the client's command line is constructed improperly. The command line ends up looking something like this: / / java client -cp classpath Main client localhost:58583 -c config / / The word client appears twice, but what's really required is -client to appear as an argument after Main. / / / / ** The client is run using ProcessBuilder, which by default sends stdout and stderr to pipes to be read by the parent. But the parent never reads them, thus any messages from the client are never seen. The client is the one that emits the benchmark report, so its output needs to be seen. It might be sufficient to have the client inherit the parent's stdout and stderr. This might intermix the client's and server's output, but it's better than nothing. / / / / ** The config file is checked with the following code: / / try { confFile = args[i]; confstr = new FileInputStream(System.getProperty(test.src) + System.getProperty(file.separator) + confFile); } catch (IOException e) { die(Error: unable to open \ + args[i] + \); } / / This is potentially misleading, as the message doesn't print the actual filename that was attempted to be opened. / / This is important, as the test.src property doesn't exist in the client JVM. / / Note that the original shell script passed full pathnames for the config file to both the client and the server. The new @run tag merely says -c config which redefines the config filename to be relative to the test.src directory. You could pass -Dtest.src=... to the client, but it seems like there should be something better than can be done. / / / / ** The client needs to have its security policy set up. This is missing from the construction of the client's command line. / / / / ** ProcessBuilder takes a ListString for its command; there is no need to turn the list into an array. / / / / ** In the benchmark main methods, code of the form, / / while (true) { runBenchmarks(); if (exitRequested) { System.exit(); } } / / was replaced with / / while (!exitRequested) { runBenchmarks(); } / / This is a subtle
Re: i18n dev RFR: 8027370: (tz) Support tzdata2013h
Hi, Can I ask reviewers to look at this fix? As was mentioned, the testing issues described in request were resolved. Thanks in advance, Aleksej On 11/06/2013 11:11 PM, Aleksej Efimov wrote: Hi, We have a fix for JDK-8027848 and it was approved in parallel thread. With '-XX:-UseMathExactIntrinsics' tests run flag and applied fix for JDK-8027848 all tests from the following test sets are passing: test/sun/util/calendar test/java/util/Calendar test/sun/util/resources/TimeZone test/sun/util/calendar test/java/util/TimeZone test/java/time test/java/util/Formatter. I suppose, that we're good to go with this change, unless there are some comments or issues. -Aleksej On 11/05/2013 10:07 PM, Aleksej Efimov wrote: Alan, Thank you for advise. I have executed the same test sets with -XX:-UseMathExactIntrinsics and, as was expected, there is only one failure: sun/util/calendar/zi/TestZoneInfo310.java. -Aleksej On 11/05/2013 09:50 PM, Alan Bateman wrote: On 05/11/2013 16:38, Aleksej Efimov wrote: Hi, Can I have a review for tzdata2013h integration [1]. The webrev link can be located here [2]. The following test sets were executed on build with fix: test/sun/util/calendar test/java/util/Calendar test/sun/util/resources/TimeZone test/sun/util/calendar test/java/util/TimeZone test/java/time test/java/util/Formatter And here is the list of failures: FAILED: java/time/tck/java/time/temporal/TCKWeekFields.java %1% FAILED: java/time/tck/java/time/TCKInstant.java %1% FAILED: java/time/tck/java/time/TCKLocalDate.java %1% FAILED: java/time/tck/java/time/TCKLocalDateTime.java %1% FAILED: java/time/tck/java/time/TCKOffsetDateTime.java %1% FAILED: java/time/tck/java/time/TCKOffsetTime.java %1% FAILED: java/time/tck/java/time/TCKZonedDateTime.java %1% FAILED: java/time/test/java/time/format/TestZoneTextPrinterParser.java %1% FAILED: java/util/Calendar/JavatimeTest.java %1% FAILED: sun/util/calendar/zi/TestZoneInfo310.java The group %1% tests failures relates to the JDK-8027622 bug and are expected (actually, it was already resolved in hotspot repo). In another thread, Amy Lu is updating the ProblemList.txt to exclude these tests until the hotspot fix gets to jdk8/tl. For your testing then you could run with -XX:-UseMathExactIntrinsics and check that the all tests related to time and time zones are passing. -Alan.
Re: RFR: 8028027: serialver should emit declaration with the 'private' modifier
Looks good to me. It should have been this way from day one. -Chris. On 08/11/2013 03:02, Stuart Marks wrote: Hi all, Please review this quick one-liner to change the serialver tool so that it emits a serialVersionUID declaration with the 'private' modifier, which comports with the recommendation in the java.io.Serializable page. Bug: https://bugs.openjdk.java.net/browse/JDK-8028027 Patch appended below. Thanks, s'marks -- # HG changeset patch # User smarks # Date 1383868023 28800 # Node ID 1e1088bfea50d7d3cc7cfdce2b0085b7adc6a180 # Parent f18b60bd22a1be988d329960c46d504f4b75000f 8028027: serialver should emit declaration with the 'private' modifier Reviewed-by: XXX diff -r f18b60bd22a1 -r 1e1088bfea50 src/share/classes/sun/tools/serialver/SerialVer.java --- a/src/share/classes/sun/tools/serialver/SerialVer.java Thu Nov 07 15:45:21 2013 -0800 +++ b/src/share/classes/sun/tools/serialver/SerialVer.java Thu Nov 07 15:47:03 2013 -0800 @@ -211,7 +211,7 @@ Class? cl = Class.forName(classname, false, loader); ObjectStreamClass desc = ObjectStreamClass.lookup(cl); if (desc != null) { - return static final long serialVersionUID = + + return private static final long serialVersionUID = + desc.getSerialVersionUID() + L;; } else { return null;
Re: 8028027: serialver should emit declaration with the 'private' modifier
On 08/11/2013 09:45, Yuri Gaevsky wrote: Hi Stuart, Unfortunately, several Java SE interfaces have public SVUIDs, so the fix can cause confusion: I think Stuart's suggestion is good for the case where the class doesn't have the serialVersionUID already, you just paste it into the source code to keep the value as it was generated previously. I think your concern is where the serialVersionUID is declared but hasn't following the recommendation. In that case then the emitted source line won't match the existing source declaration. Does that matter? I guess serialver should use reflection to get the modifiers and print a helpful suggestion. -Alan.
RE: 8028027: serialver should emit declaration with the 'private' modifier
Unfortunately, several Java SE interfaces have public SVUIDs, so the fix can cause confusion: I think Stuart's suggestion is good for the case where the class doesn't have the serialVersionUID already, you just paste it into the source code to keep the value as it was generated previously. Fully agree. I think your concern is where the serialVersionUID is declared but hasn't following the recommendation. In that case then the emitted source line won't match the existing source declaration. Does that matter? I guess serialver should use reflection to get the modifiers and print a helpful suggestion. Well, it would be more consistent to check for existence of protected or public serialVersionUID with Reflection API and change the serialver output accordingly. Thanks, -Yuri
Re: RFR for JDK-8019502 some java.util test does not pass VM options when launching java program in script
On 8/11/2013 8:13 PM, Patrick Zhang wrote: Hi Alan, I have created https://bugs.openjdk.java.net/browse/JDK-8028044 to hold it. My understanding is that 8019502 was originally covering this issue for a broad range of tests across different areas. They were then split out into different CRs for different groups of tests. The remaining tests in the original bug were then handed to Patrick. David Regards Patrick On 11/8/13 5:24 PM, Alan Bateman wrote: On 08/11/2013 03:41, Patrick Zhang wrote: Sorry, I have some problems to connect to cr.openjdk.java.net yesterday. Now the webrev and result are attached. Please help to review. After checking the scripts in java.util, most of scripts have been finished in 8003890. So the webrev only change 2 rest files. webrev: http://cr.openjdk.java.net/~pzhang/8019502/webrev/ result: http://cr.openjdk.java.net/~pzhang/8019502/GenericTimeZoneNamesTest.jtr http://cr.openjdk.java.net/~pzhang/8019502/NarrowNamesTest.jtr cc'ing i18n-dev as that is where Calendar (and its tests) are maintained. The change look okay to me but I wonder if perhaps you have the wrong bug number. JDK-8019502 is a confused bug but I think it was originally intended to be an audit of the tests that use Runtime.exec or ProcessBuilder to see if they should be changed to pass the options through. I just mention it as I suspect you might need to create a new bug for this and then split up JDK-8019502 into other tasks. -Alan
Re: RFR: 5049299 - (process) Use,posix_spawn, not fork, on S10 to avoid swap,exhaustion (jdk7u-dev)
vfork was the default in Linux before 5049299. You can see the variable START_CHILD_USE_VFORK being set in: http://cr.openjdk.java.net/~robm/5049299/webrev.06/src/solaris/native/java/lang/UNIXProcess_md.c.cdiff.html -Rob On 08/11/13 00:39, David Holmes wrote: On 7/11/2013 11:53 PM, Rob McKenna wrote: Ah, thanks for catching that David, I've updated the webrev in place. I believe the reasoning is that we want to minimise any potential impact to customers running in production. The general feeling seems to be that Mac is a development platform and is less likely to cause us problems in that regard. (not that I would anticipate any on Solaris, but I understand the desire to be conservative) And linux? It has changed to vfork right? So OSX has changed, linux has changed, but Solaris remains as-is. All platforms allow selecting the mechanism via the property jdk.lang.Process.launchMechanism Thanks, David -Rob On 07/11/13 01:51, David Holmes wrote: On 6/11/2013 10:00 PM, Rob McKenna wrote: Hi David, The only difference in 5049299 is the change in the default property value in Solaris. Apologies for not making that clear. Given this was primarily aimed at Solaris in the first place it seems strange to me to not make the change on Solaris. If this is considered risky fr an update release then I would think that applies to all platforms equally. ?? If Solaris is not in fact changing then the comment in src/solaris/native/java/lang/UNIXProcess_md.c needs to be altered: * Based on the above analysis, we are currently using vfork() on ! * Linux and spawn() on other Unix systems, but the code to use clone() ! * and fork() remains. David - -Rob On 06/11/13 01:09, David Holmes wrote: Hi Rob, How different is this to the JDK 8 version? Thanks, David On 6/11/2013 7:24 AM, Rob McKenna wrote: .. http://cr.openjdk.java.net/~robm/5049299/7/webrev.01/ -Rob On 05/11/13 21:23, Rob McKenna wrote: Hi folks, I'd like to backport this change to JDK7. Note: this fix uses posix_spawn by default on Mac OSX only. On Solaris fork will remain the default behaviour. I've just noticed that there is a problem with the testcase on Solaris in that it will test fork twice. (and won't test posix_spawn) I'll figure out a way around this, but in the mean time I'd like to get the ball rolling on this review anyway. -Rob
RFR: JDK-8028055: (reflect) invoking Method/Constructor in anonymous classes breaks with -Dsun.reflect.noInflation=true
Hi Please review fix for: https://bugs.openjdk.java.net/browse/JDK-8028055 (reflect) invoking Method/Constructor in anonymous classes breaks with -Dsun.reflect.noInflation=true As Peter observed here [1] the current fix is incomplete as it does not work when -Dsun.reflect.noInflation=true is set. Also included is a modification of ReflectUtil.isVMAnonymousClass(cls) to not allocate new Strings, guided by performance numbers from Peter [2]. webrev here: http://cr.openjdk.java.net/~jfranck/8028055/webrev.00/ [1] http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-November/022872.html [2] http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-November/022955.html cheers /Joel
Re: RFR: 8026330: java.util.Base64 urlEncoder should omit padding
On 06/11/2013 18:44, Xueming Shen wrote: Hi, The latest spec and implementation of java.util.Base64.getXXXEncoder() is to add appropriate padding character(s) at the end of the output encoded data stream, to follow the note explicitly specified in the RFC Implementations MUST include appropriate pad characters at the end of encoded data unless the specification referring to this document explicitly states otherwise. However the RFE also mentions that In some circumstances, the use of padding (=) in base-encoded data is not required or used... Feedback so far also suggests that Base64.encoder without padding might be desired in some real world use scenario. So here is the webrev to add a new method to the Encoder class to return a non-padding version. http://cr.openjdk.java.net/~sherman/8026330/webrev The API looks okay although some developers might not initially recognize that an Encoder is immutable. In particularly, this statement might not be clear: This instance of encoder is unaffected by this invocation. What you would think about including an example in the javadoc so that it's clear how to get an Encoder that doesn't emit padding? Otherwise this looks good except that I wonder about needing to eagerly create all 6 Encoders. So are you trying to get this into 8 or are you thinking of holding this to 9? -Alan.
RE: 8028027: serialver should emit declaration with the 'private' modifier
Well, it would be more consistent to check for existence of protected or public serialVersionUID with Reflection API and change the serialver output accordingly. Please see suggested fix and its output below. Thanks, -Yuri $ serialver java.security.PublicKey java.security.PublicKey:public static final long serialVersionUID = 7187392471159151072L; $ serialver java.lang.Exception java.lang.Exception: static final long serialVersionUID = -3387516993124229948L; $ serialver java.lang.AssertionError java.lang.AssertionError:private static final long serialVersionUID = -5013299493970297370L; $ serialver javax.xml.ws.soap.SOAPFaultException javax.xml.ws.soap.SOAPFaultException:private static final long serialVersionUID = -104968645459360720L; $ hg diff diff --git a/src/share/classes/sun/tools/serialver/SerialVer.java b/src/share/classes/sun/tools/serialver/SerialVer.java --- a/src/share/classes/sun/tools/serialver/SerialVer.java +++ b/src/share/classes/sun/tools/serialver/SerialVer.java @@ -38,6 +38,7 @@ import java.net.MalformedURLException; import java.util.StringTokenizer; import sun.net.www.ParseUtil; +import java.lang.reflect.Modifier; public class SerialVer extends Applet { GridBagLayout gb; @@ -211,7 +212,17 @@ Class? cl = Class.forName(classname, false, loader); ObjectStreamClass desc = ObjectStreamClass.lookup(cl); if (desc != null) { -return static final long serialVersionUID = + + String ams = ; + try { + final int mod = + cl.getDeclaredField(serialVersionUID).getModifiers(); + ams = Modifier.isPublic(mod) ? public + : Modifier.isProtected(mod) ? protected + : Modifier.isPrivate(mod) ? private : ; + } catch (NoSuchFieldException nsfe) { + ams = private; + } +return + ams + static final long serialVersionUID = + desc.getSerialVersionUID() + L;; } else { return null;
Re: RFR: 8022213 Intermittent test failures in java/net/URLClassLoader (Add jdk/testlibrary/FileUtils.java)
Alan, An alternative might be to just throw the IOException with InterruptedException as the cause. Perfect. Updated in the new webrev. Dan, You are completely correct. I was only catering for the case where java.nio.file.FileSystemException: your_file: The process cannot access the file because it is being used by another process. Where the delete succeeds then we need to wait until the underlying platform delete completes, i.e. the file no longer exists. Updated webrev ( with only the diff from the previous ) : http://cr.openjdk.java.net/~chegar/fileUtils.02/webrev/ Thanks, -Chris. On 08/11/2013 02:26, Dan Xu wrote: On 11/07/2013 11:04 AM, Alan Bateman wrote: On 07/11/2013 14:59, Chris Hegarty wrote: Given both Michael and Alan's comments. I've update the webrev: http://cr.openjdk.java.net/~chegar/fileUtils.01/webrev/ 1) more descriptive method names 2) deleteXXX methods return if interrupted, leaving the interrupt status set 3) Use Files.copy with REPLACE_EXISTING 4) Use SimpleFileVisitor, rather than FileVisitor This looks better although interrupting the sleep means that the deleteXXX will quietly terminate with the interrupt status set (which could be awkward to diagnose if used with tests that are also using Thread.interrupt). An alternative might be to just throw the IOException with InterruptedException as the cause. -Alan. Hi Chris, In the method, deleteFileWithRetry0(), it assumes that if any other process is accessing the same file, the delete operation, Files.delete(), will throw out IOException on Windows. But I don't see this assumption is always true when I investigated this issue on intermittent test failures. When Files.delete() method is called, it finally calls DeleteFile or RemoveDirectory functions based on whether the target is a file or directory. And these Windows APIs only mark the target for deletion on close and return immediately without waiting the operation to be completed. If another process is accessing the file in the meantime, the delete operation does not occur and the target file stays at delete-pending status until that open handle is closed. It basically implies that DeleteFile and RemoveDirectory is like an async operation. Therefore, we cannot assume that the file/directory is deleted after Files.delete() returns or File.delete() returns true. When checking those intermittently test failures, I find the test normally succeeds on the Files.delete() call. But due to the interference of Anti-virus or other Windows daemon services, the target file changes to delete-pending status. And the immediately following operation fails due the target file still exists, but our tests assume the target file is already gone. Because the delete-pending status of a file usually last for a very short time which depends on the interference source, such failures normally happens when we recursively delete a folder or delete-and-create a file with the same file name at a high frequency. It is basically a Windows API design or implementation issue. I have logged an enhancement, JDK-8024496, to solve it from Java library layer. Currently, I have two strategies in mind. One is to make the delete operation blocking, which means to make sure the file/directory is deleted before the return. The other is to make sure the delete-pending file does not lead to a failure of subsequent file operations. But they both has pros and cons. Thank! -Dan
RFR (XS): 8027823: catchException combinator fails with 9 argument target
http://cr.openjdk.java.net/~vlivanov/8027823/webrev.00/ MethodHandleImpl.makeGuardWithCatch has special invokers (GuardWithCatch.invoke_L*) for methods with arity up to 8. When method arity is larger, generic invoker (GuardWithCatch.invoke_V) is used. Generic invoker expects GuardWithCatch.target GuardWithCatch.catcher method handles to have (Object... av)Object type, but they can reference arbitrary methods, so type conversion is needed. makeSpreadArguments takes care of parameters' type conversion, but return type is left as is. That's the reason why GuardWithCatch.invoke_V fails to invoke both target or catcher. The fix is to add return type conversion on both paths. Testing: failing test, test/java/lang/invoke/ Thanks! Best regards, Vladimir Ivanov JBS: https://bugs.openjdk.java.net/browse/JDK-8027823
hg: jdk8/tl/jdk: 8027351: (ref) Private finalize method invoked in preference to protected superclass method
Changeset: 41d7ce111bd8 Author:mchung Date: 2013-11-08 07:53 -0800 URL: http://hg.openjdk.java.net/jdk8/tl/jdk/rev/41d7ce111bd8 8027351: (ref) Private finalize method invoked in preference to protected superclass method Reviewed-by: alanb, dholmes, mr, plevart, psandoz ! makefiles/lib/CoreLibraries.gmk ! makefiles/mapfiles/libjava/mapfile-vers ! makefiles/mapfiles/libjava/reorder-sparc ! makefiles/mapfiles/libjava/reorder-sparcv9 ! makefiles/mapfiles/libjava/reorder-x86 ! src/share/classes/java/lang/System.java ! src/share/classes/java/lang/ref/Finalizer.java ! src/share/classes/sun/misc/JavaLangAccess.java ! src/share/classes/sun/misc/VM.java + test/java/lang/ref/FinalizeOverride.java
hg: jdk8/tl/jdk: 8022963: java/net/NetworkInterface/Equals.java fails equality for Windows Teredo Interface
Changeset: 3112729d6b74 Author:tyan Date: 2013-11-08 15:12 + URL: http://hg.openjdk.java.net/jdk8/tl/jdk/rev/3112729d6b74 8022963: java/net/NetworkInterface/Equals.java fails equality for Windows Teredo Interface Reviewed-by: chegar ! test/java/net/MulticastSocket/TestInterfaces.java ! test/java/net/NetworkInterface/Equals.java
hg: jdk8/tl/jdk: 8019834: InetAddress.getByName hangs for bad IPv6 literals
Changeset: 771c77b49bb6 Author:chegar Date: 2013-11-08 15:15 + URL: http://hg.openjdk.java.net/jdk8/tl/jdk/rev/771c77b49bb6 8019834: InetAddress.getByName hangs for bad IPv6 literals Reviewed-by: alanb ! src/share/classes/java/net/InetAddress.java ! test/java/net/ipv6tests/BadIPv6Addresses.java
Re: i18n dev RFR: 8027370: (tz) Support tzdata2013h
looks fine. I would assume you've also run the corresponding tests at test/closed repo. -Sherman On 11/5/2013 8:38 AM, Aleksej Efimov wrote: Hi, Can I have a review for tzdata2013h integration [1]. The webrev link can be located here [2]. The following test sets were executed on build with fix: test/sun/util/calendar test/java/util/Calendar test/sun/util/resources/TimeZone test/sun/util/calendar test/java/util/TimeZone test/java/time test/java/util/Formatter And here is the list of failures: FAILED: java/time/tck/java/time/temporal/TCKWeekFields.java %1% FAILED: java/time/tck/java/time/TCKInstant.java %1% FAILED: java/time/tck/java/time/TCKLocalDate.java %1% FAILED: java/time/tck/java/time/TCKLocalDateTime.java %1% FAILED: java/time/tck/java/time/TCKOffsetDateTime.java %1% FAILED: java/time/tck/java/time/TCKOffsetTime.java %1% FAILED: java/time/tck/java/time/TCKZonedDateTime.java %1% FAILED: java/time/test/java/time/format/TestZoneTextPrinterParser.java %1% FAILED: java/util/Calendar/JavatimeTest.java %1% FAILED: sun/util/calendar/zi/TestZoneInfo310.java The group %1% tests failures relates to the JDK-8027622 bug and are expected (actually, it was already resolved in hotspot repo). The 'TestZoneInfo310' test failure is an actual error in current ZoneInfoFile class implementation in JDK. I have filled a bug for this one [3] and will send a separate review with fix later today. [1] https://bugs.openjdk.java.net/browse/JDK-8027370 [2] http://cr.openjdk.java.net/~aefimov/8027370/webrev.00/ [3] https://bugs.openjdk.java.net/browse/JDK-8027848
hg: jdk8/tl/jdk: 8028069: (ref) Finalizer.c not deleted in the changeset for JDK-8027351
Changeset: 1c9ba18198d5 Author:mchung Date: 2013-11-08 09:43 -0800 URL: http://hg.openjdk.java.net/jdk8/tl/jdk/rev/1c9ba18198d5 8028069: (ref) Finalizer.c not deleted in the changeset for JDK-8027351 Reviewed-by: alanb - src/share/native/java/lang/ref/Finalizer.c
Re: RFR for JDK-7190106 RMI benchmark fails intermittently because of use of fixed port
Hi Tristan, Yes, it's kind of a problem that the RMI TestLibrary is in the unnamed package. Classes in a named package cannot import classes from the unnamed package. We've run into problems with this before. Eventually, we should move TestLibrary a named package. I think it's possible to work around this without too much difficulty. Note that classes in the unnamed package can import classes from named packages. So, perhaps you can put the RmiBench main class in the unnamed package so it has access to TestLibrary. Then have the benchmarks themselves in the bench.rmi package. The config file already references the benchmarks by fully qualified class name (e.g., bench.rmi.NullCalls) so with a bit of tinkering you ought to be able to get this to work. s'marks On 11/8/13 3:00 AM, Tristan Yan wrote: /Thank you, Stuart There is one review point I want to ask you opinion. Which is the reason that I moved from test/java/rmi/reliability/benchmark/bench/rmi to test/java/rmi/reliability/benchmark is Main.java need access class TestLibrary for supporting random port. TestLibrary is a unpackage class, I couldn't find a way to let a class which has Package to access the class without package. Do you have suggestion on that? Thank you so much. Tristan On 11/06/2013 09:50 AM, Stuart Marks wrote: / / / / On 11/1/13 9:18 AM, Tristan Yan wrote: / /Hi Everyone http://cr.openjdk.java.net/~pzhang/Tristan/7190106/webrev/ / / Description: 1. Convert shell script test to Java program test. 2. Using random server port by reusing Darryl Mocek's work to replace fixed server port. 3. Using java Process class to start client process. 4. Also convert other shell script test runSerialBench.sh to java program test also / / Hi Tristan, / / Several comments on this webrev. / / / / ** The original arrangement within the test/java/rmi/reliability/benchmark directory had the main benchmark files (scripts) at the top, some benchmark framework files in the bench subdirectory, and the actual RMI and serialization benchmarks in bench/rmi and bench/serial subdirectories. / / The webrev moves all the RMI benchmarks to the top benchmark directory but leaves the serial benchmarks in bench/serial. The RMI benchmarks are now all cluttering the top directory, but the main serial benchmark test is now buried in the bench/serial directory. The nice organization that was there before is now spoiled. Is this rearrangement necessary in order to convert the scripts to Java? I would prefer the original arrangement be left in place. / / / / ** The RMI benchmark Main.java file has a @run tag of the form, / / @run main/othervm/policy=policy.all/timeout=1800 -server Main -c config / / There is a subtle but serious problem here: the -server option is passed to the JVM and not as an argument to the main() method. The main() method gets neither a -server nor a -client argument, so its default run mode as defined by the benchmark itself is SAMEVM. This runs the client and server in the same JVM, which is different from the shell script, which ran separate client and server JVMs. / / / / ** The logic to process the -server argument still expects to take a port, even though the port is assigned automatically. So the obvious fix to the above, / / @run main/othervm/policy=policy.all/timeout=1800 Main -server -c config / / doesn't work, since a port is missing. The logic to increment the argument index to collect the port argument should be removed. Also, the -server line should be restored to the usage message, but without the port argument. / / / / ** After this is done, the client's command line is constructed improperly. The command line ends up looking something like this: / / java client -cp classpath Main client localhost:58583 -c config / / The word client appears twice, but what's really required is -client to appear as an argument after Main. / / / / ** The client is run using ProcessBuilder, which by default sends stdout and stderr to pipes to be read by the parent. But the parent never reads them, thus any messages from the client are never seen. The client is the one that emits the benchmark report, so its output needs to be seen. It might be sufficient to have the client inherit the parent's stdout and stderr. This might intermix the client's and server's output, but it's better than nothing. / / / / ** The config file is checked with the following code: / / try { confFile = args[i]; confstr = new FileInputStream(System.getProperty(test.src) + System.getProperty(file.separator) + confFile); } catch (IOException e) { die(Error: unable to open \ + args[i] + \); } / / This is potentially misleading, as the message doesn't print the actual filename that was attempted to be opened. / / This is important, as the test.src property doesn't exist in the client JVM. / / Note that the original shell script passed full pathnames for the config
Re: 8028027: serialver should emit declaration with the 'private' modifier
On 11/8/13 7:20 AM, Yuri Gaevsky wrote: Well, it would be more consistent to check for existence of protected or public serialVersionUID with Reflection API and change the serialver output accordingly. Please see suggested fix and its output below. This change isn't consistent with the intent of the 'serialver' utility. Its intent is to produce a declaration that's suitable for copying into an evolving class. [1] (Clearly, this means the source code of a class.) The spec [2] strongly advises that serialVersionUID be private. As such, serialver should follow the strong advice given in the spec. If there happens to be a declaration in the class that, probably mistakenly, goes against this advice, serialver shouldn't emit a line that perpetuates this mistake. One can use javap -v to determine the presence of serialVersionUID field, including its modifiers, if that's what's desired. s'marks [1] http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/serialver.html [2] http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html Thanks, -Yuri $ serialver java.security.PublicKey java.security.PublicKey:public static final long serialVersionUID = 7187392471159151072L; $ serialver java.lang.Exception java.lang.Exception: static final long serialVersionUID = -3387516993124229948L; $ serialver java.lang.AssertionError java.lang.AssertionError:private static final long serialVersionUID = -5013299493970297370L; $ serialver javax.xml.ws.soap.SOAPFaultException javax.xml.ws.soap.SOAPFaultException:private static final long serialVersionUID = -104968645459360720L; $ hg diff diff --git a/src/share/classes/sun/tools/serialver/SerialVer.java b/src/share/classes/sun/tools/serialver/SerialVer.java --- a/src/share/classes/sun/tools/serialver/SerialVer.java +++ b/src/share/classes/sun/tools/serialver/SerialVer.java @@ -38,6 +38,7 @@ import java.net.MalformedURLException; import java.util.StringTokenizer; import sun.net.www.ParseUtil; +import java.lang.reflect.Modifier; public class SerialVer extends Applet { GridBagLayout gb; @@ -211,7 +212,17 @@ Class? cl = Class.forName(classname, false, loader); ObjectStreamClass desc = ObjectStreamClass.lookup(cl); if (desc != null) { -return static final long serialVersionUID = + + String ams = ; + try { + final int mod = + cl.getDeclaredField(serialVersionUID).getModifiers(); + ams = Modifier.isPublic(mod) ? public + : Modifier.isProtected(mod) ? protected + : Modifier.isPrivate(mod) ? private : ; + } catch (NoSuchFieldException nsfe) { + ams = private; + } +return + ams + static final long serialVersionUID = + desc.getSerialVersionUID() + L;; } else { return null;
JDK RFR to clean-up lint warnings in reflection implementation
Hello, Please review the simple patch below which addresses a handful of raw types lint warning in the core reflection implementation code. (If memory serves, this code dates back from a time during the development of JDK 5 when wildcards could not be used with arrays; before the release shipped, that combination was allowed.) Thanks, -Joe diff -r 46982ca895b4 src/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java --- a/src/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java Fri Nov 08 18:54:29 2013 + +++ b/src/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java Fri Nov 08 11:37:54 2013 -0800 @@ -52,7 +52,7 @@ } private void validateConstructorArguments() { -TypeVariable/*?*/[] formals = rawType.getTypeParameters(); +TypeVariable?[] formals = rawType.getTypeParameters(); // check correct arity of actual type args if (formals.length != actualTypeArguments.length){ throw new MalformedParameterizedTypeException(); diff -r 46982ca895b4 src/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java --- a/src/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java Fri Nov 08 18:54:29 2013 + +++ b/src/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java Fri Nov 08 11:37:54 2013 -0800 @@ -42,7 +42,7 @@ public abstract class GenericDeclRepositoryS extends Signature extends AbstractRepositoryS { -private TypeVariable[] typeParams; // caches the formal type parameters +private TypeVariable?[] typeParams; // caches the formal type parameters protected GenericDeclRepository(String rawSig, GenericsFactory f) { super(rawSig, f); @@ -64,7 +64,7 @@ * Return the formal type parameters of this generic declaration. * @return the formal type parameters of this generic declaration */ -public TypeVariable/*?*/[] getTypeParameters(){ +public TypeVariable?[] getTypeParameters(){ if (typeParams == null) { // lazily initialize type parameters // first, extract type parameter subtree(s) from AST FormalTypeParameter[] ftps = getTree().getFormalTypeParameters();
Re: JDK RFR to clean-up lint warnings in reflection implementation
looks fine Joe On Nov 8, 2013, at 2:40 PM, Joe Darcy wrote: Hello, Please review the simple patch below which addresses a handful of raw types lint warning in the core reflection implementation code. (If memory serves, this code dates back from a time during the development of JDK 5 when wildcards could not be used with arrays; before the release shipped, that combination was allowed.) Thanks, -Joe diff -r 46982ca895b4 src/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java --- a/src/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java Fri Nov 08 18:54:29 2013 + +++ b/src/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java Fri Nov 08 11:37:54 2013 -0800 @@ -52,7 +52,7 @@ } private void validateConstructorArguments() { -TypeVariable/*?*/[] formals = rawType.getTypeParameters(); +TypeVariable?[] formals = rawType.getTypeParameters(); // check correct arity of actual type args if (formals.length != actualTypeArguments.length){ throw new MalformedParameterizedTypeException(); diff -r 46982ca895b4 src/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java --- a/src/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java Fri Nov 08 18:54:29 2013 + +++ b/src/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java Fri Nov 08 11:37:54 2013 -0800 @@ -42,7 +42,7 @@ public abstract class GenericDeclRepositoryS extends Signature extends AbstractRepositoryS { -private TypeVariable[] typeParams; // caches the formal type parameters +private TypeVariable?[] typeParams; // caches the formal type parameters protected GenericDeclRepository(String rawSig, GenericsFactory f) { super(rawSig, f); @@ -64,7 +64,7 @@ * Return the formal type parameters of this generic declaration. * @return the formal type parameters of this generic declaration */ -public TypeVariable/*?*/[] getTypeParameters(){ +public TypeVariable?[] getTypeParameters(){ if (typeParams == null) { // lazily initialize type parameters // first, extract type parameter subtree(s) from AST FormalTypeParameter[] ftps = getTree().getFormalTypeParameters(); Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037 Oracle Java Engineering 1 Network Drive Burlington, MA 01803 lance.ander...@oracle.com
hg: jdk8/tl/jdk: 8023462: TEST_BUG: test/com/sun/net/httpserver/bugs/B6433018.java fails on slow/single core machine
Changeset: 46982ca895b4 Author:tyan Date: 2013-11-08 18:54 + URL: http://hg.openjdk.java.net/jdk8/tl/jdk/rev/46982ca895b4 8023462: TEST_BUG: test/com/sun/net/httpserver/bugs/B6433018.java fails on slow/single core machine Reviewed-by: chegar ! test/com/sun/net/httpserver/bugs/B6433018.java
Re: JDK RFR to clean-up lint warnings in reflection implementation
On 08/11/2013 19:40, Joe Darcy wrote: Hello, Please review the simple patch below which addresses a handful of raw types lint warning in the core reflection implementation code. (If memory serves, this code dates back from a time during the development of JDK 5 when wildcards could not be used with arrays; before the release shipped, that combination was allowed.) This looks okay to me (and I think we have the same thing in a few other areas). -Alan
hg: jdk8/tl/jdk: 8025985: com.sun.management.OSMBeanFactory should not be public
Changeset: 40ca9e4866de Author:mchung Date: 2013-11-08 12:13 -0800 URL: http://hg.openjdk.java.net/jdk8/tl/jdk/rev/40ca9e4866de 8025985: com.sun.management.OSMBeanFactory should not be public Reviewed-by: alanb, erikj, ihse, jbachorik ! makefiles/lib/ServiceabilityLibraries.gmk ! makefiles/mapfiles/libmanagement/mapfile-vers + src/share/classes/sun/management/BaseOperatingSystemImpl.java ! src/share/classes/sun/management/ManagementFactoryHelper.java - src/share/classes/sun/management/OperatingSystemImpl.java - src/solaris/classes/com/sun/management/OSMBeanFactory.java - src/solaris/classes/com/sun/management/UnixOperatingSystem.java + src/solaris/classes/sun/management/OperatingSystemImpl.java - src/solaris/native/com/sun/management/LinuxOperatingSystem.c - src/solaris/native/com/sun/management/MacosxOperatingSystem.c - src/solaris/native/com/sun/management/SolarisOperatingSystem.c - src/solaris/native/com/sun/management/UnixOperatingSystem_md.c + src/solaris/native/sun/management/LinuxOperatingSystem.c + src/solaris/native/sun/management/MacosxOperatingSystem.c + src/solaris/native/sun/management/OperatingSystemImpl.c + src/solaris/native/sun/management/SolarisOperatingSystem.c - src/windows/classes/com/sun/management/OSMBeanFactory.java - src/windows/classes/com/sun/management/OperatingSystem.java + src/windows/classes/sun/management/OperatingSystemImpl.java - src/windows/native/com/sun/management/OperatingSystem_md.c + src/windows/native/sun/management/OperatingSystemImpl.c
hg: jdk8/tl/jdk: 8028076: Correct raw type lint warnings in core reflection implementation classes
Changeset: 11376ad23e21 Author:darcy Date: 2013-11-08 12:19 -0800 URL: http://hg.openjdk.java.net/jdk8/tl/jdk/rev/11376ad23e21 8028076: Correct raw type lint warnings in core reflection implementation classes Reviewed-by: lancea, alanb ! src/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java ! src/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java
Re: JDK RFR to clean-up lint warnings in reflection implementation
On 11/08/2013 12:06 PM, Alan Bateman wrote: On 08/11/2013 19:40, Joe Darcy wrote: Hello, Please review the simple patch below which addresses a handful of raw types lint warning in the core reflection implementation code. (If memory serves, this code dates back from a time during the development of JDK 5 when wildcards could not be used with arrays; before the release shipped, that combination was allowed.) This looks okay to me (and I think we have the same thing in a few other areas). Hi Alan, Yes; over 1/3 of the remaining lint warnings in core-libs are for the use of raw types. There are many uses of Class or Class[] instead of Class? or Class?[]. -Joe
Re: JDK RFR to clean-up lint warnings in reflection implementation
Looks good Joe. cheers /Joel On 8 nov 2013, at 20:40, Joe Darcy joe.da...@oracle.com wrote: Hello, Please review the simple patch below which addresses a handful of raw types lint warning in the core reflection implementation code. (If memory serves, this code dates back from a time during the development of JDK 5 when wildcards could not be used with arrays; before the release shipped, that combination was allowed.) Thanks, -Joe diff -r 46982ca895b4 src/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java --- a/src/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java Fri Nov 08 18:54:29 2013 + +++ b/src/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java Fri Nov 08 11:37:54 2013 -0800 @@ -52,7 +52,7 @@ } private void validateConstructorArguments() { -TypeVariable/*?*/[] formals = rawType.getTypeParameters(); +TypeVariable?[] formals = rawType.getTypeParameters(); // check correct arity of actual type args if (formals.length != actualTypeArguments.length){ throw new MalformedParameterizedTypeException(); diff -r 46982ca895b4 src/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java --- a/src/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java Fri Nov 08 18:54:29 2013 + +++ b/src/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java Fri Nov 08 11:37:54 2013 -0800 @@ -42,7 +42,7 @@ public abstract class GenericDeclRepositoryS extends Signature extends AbstractRepositoryS { -private TypeVariable[] typeParams; // caches the formal type parameters +private TypeVariable?[] typeParams; // caches the formal type parameters protected GenericDeclRepository(String rawSig, GenericsFactory f) { super(rawSig, f); @@ -64,7 +64,7 @@ * Return the formal type parameters of this generic declaration. * @return the formal type parameters of this generic declaration */ -public TypeVariable/*?*/[] getTypeParameters(){ +public TypeVariable?[] getTypeParameters(){ if (typeParams == null) { // lazily initialize type parameters // first, extract type parameter subtree(s) from AST FormalTypeParameter[] ftps = getTree().getFormalTypeParameters();
RE: 8028027: serialver should emit declaration with the 'private' modifier
Stuart, Sorry, but such inconsistency between serialver/javap is a bug (IMHO, of course). If there happens to be a declaration in the class that, probably mistakenly, goes against this advice, serialver shouldn't emit a line that perpetuates this mistake. I would argue that for any real-life API it's almost impossible to fix such explicitly-defined bad (i.e. public/protected) SVUID in any compatible way, so emitting 'private' will not help there, unfortunately. -Yuri -Original Message- From: Stuart Marks [mailto:stuart.ma...@oracle.com] Sent: Friday, November 8, 2013 10:48 PM To: Yuri Gaevsky Cc: Alan Bateman; core-libs-dev Subject: Re: 8028027: serialver should emit declaration with the 'private' modifier On 11/8/13 7:20 AM, Yuri Gaevsky wrote: Well, it would be more consistent to check for existence of protected or public serialVersionUID with Reflection API and change the serialver output accordingly. Please see suggested fix and its output below. This change isn't consistent with the intent of the 'serialver' utility. Its intent is to produce a declaration that's suitable for copying into an evolving class. [1] (Clearly, this means the source code of a class.) The spec [2] strongly advises that serialVersionUID be private. As such, serialver should follow the strong advice given in the spec. If there happens to be a declaration in the class that, probably mistakenly, goes against this advice, serialver shouldn't emit a line that perpetuates this mistake. One can use javap -v to determine the presence of serialVersionUID field, including its modifiers, if that's what's desired. s'marks [1] http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/serialver.html [2] http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html Thanks, -Yuri $ serialver java.security.PublicKey java.security.PublicKey:public static final long serialVersionUID = 7187392471159151072L; $ serialver java.lang.Exception java.lang.Exception: static final long serialVersionUID = -3387516993124229948L; $ serialver java.lang.AssertionError java.lang.AssertionError:private static final long serialVersionUID = -5013299493970297370L; $ serialver javax.xml.ws.soap.SOAPFaultException javax.xml.ws.soap.SOAPFaultException:private static final long serialVersionUID = -104968645459360720L; $ hg diff diff --git a/src/share/classes/sun/tools/serialver/SerialVer.java b/src/share/classes/sun/tools/serialver/SerialVer.java --- a/src/share/classes/sun/tools/serialver/SerialVer.java +++ b/src/share/classes/sun/tools/serialver/SerialVer.java @@ -38,6 +38,7 @@ import java.net.MalformedURLException; import java.util.StringTokenizer; import sun.net.www.ParseUtil; +import java.lang.reflect.Modifier; public class SerialVer extends Applet { GridBagLayout gb; @@ -211,7 +212,17 @@ Class? cl = Class.forName(classname, false, loader); ObjectStreamClass desc = ObjectStreamClass.lookup(cl); if (desc != null) { -return static final long serialVersionUID = + + String ams = ; + try { + final int mod = + cl.getDeclaredField(serialVersionUID).getModifiers(); + ams = Modifier.isPublic(mod) ? public + : Modifier.isProtected(mod) ? protected + : Modifier.isPrivate(mod) ? private : ; + } catch (NoSuchFieldException nsfe) { + ams = private; + } +return + ams + static final long serialVersionUID = + desc.getSerialVersionUID() + L;; } else { return null;
RFR: 8028041 Serialized Form description of j.l.String is not consistent with the implementation
Hi, Please review this correction to the documentation of the serialized form of String. There is no change to the specification or behavior of the serialization of strings. It seemed safer to refer to the serialization specification and remove the incorrect details instead of trying to correct the incorrect details by adding more detail. Webrev: http://cr.openjdk.java.net/~rriggs/webrev-string-serial-8028041/ Thanks, Roger [1 ] JDK-8028041 https://bugs.openjdk.java.net/browse/JDK-8028041 Serialized Form description of j.l.String is not consistent with the implementation
hg: jdk8/tl/jdk: 8028074: InetAddress.getByName fails with UHE invalid IPv6 address if host name starts with a-f
Changeset: 50df04934e86 Author:alanb Date: 2013-11-08 21:07 + URL: http://hg.openjdk.java.net/jdk8/tl/jdk/rev/50df04934e86 8028074: InetAddress.getByName fails with UHE invalid IPv6 address if host name starts with a-f Reviewed-by: chegar ! src/share/classes/java/net/InetAddress.java
Re: RFR: 8028041 Serialized Form description of j.l.String is not consistent with the implementation
On 08/11/2013 20:56, roger riggs wrote: Hi, Please review this correction to the documentation of the serialized form of String. There is no change to the specification or behavior of the serialization of strings. It seemed safer to refer to the serialization specification and remove the incorrect details instead of trying to correct the incorrect details by adding more detail. Webrev: http://cr.openjdk.java.net/~rriggs/webrev-string-serial-8028041/ It make sense to reference the spec rather than duplicate how long strings are handled. So looks good to me (assuming the link works as expected when the docs are generated). -Alan.
Re: RFR: 8028041 Serialized Form description of j.l.String is not consistent with the implementation
On 11/8/13 1:34 PM, Alan Bateman wrote: On 08/11/2013 20:56, roger riggs wrote: Please review this correction to the documentation of the serialized form of String. There is no change to the specification or behavior of the serialization of strings. It seemed safer to refer to the serialization specification and remove the incorrect details instead of trying to correct the incorrect details by adding more detail. Webrev: http://cr.openjdk.java.net/~rriggs/webrev-string-serial-8028041/ It make sense to reference the spec rather than duplicate how long strings are handled. So looks good to me (assuming the link works as expected when the docs are generated). Hi Roger, Yes, I agree with the approach of referencing the spec as well. On the link format, I'd recommend using {@docRoot} instead of a long chain of double dots. (Yes, this is used inconsistent in the javadoc. It's yet another thing to be cleaned up.) s'marks
Re: RFR: 8026330: java.util.Base64 urlEncoder should omit padding
On 11/08/2013 06:00 AM, Alan Bateman wrote: On 06/11/2013 18:44, Xueming Shen wrote: Hi, The latest spec and implementation of java.util.Base64.getXXXEncoder() is to add appropriate padding character(s) at the end of the output encoded data stream, to follow the note explicitly specified in the RFC Implementations MUST include appropriate pad characters at the end of encoded data unless the specification referring to this document explicitly states otherwise. However the RFE also mentions that In some circumstances, the use of padding (=) in base-encoded data is not required or used... Feedback so far also suggests that Base64.encoder without padding might be desired in some real world use scenario. So here is the webrev to add a new method to the Encoder class to return a non-padding version. http://cr.openjdk.java.net/~sherman/8026330/webrev The API looks okay although some developers might not initially recognize that an Encoder is immutable. In particularly, this statement might not be clear: This instance of encoder is unaffected by this invocation. What you would think about including an example in the javadoc so that it's clear how to get an Encoder that doesn't emit padding? I have updated that statement to be more verbose and obvious * * p The encoding scheme of this encoder instance is unaffected by * this invocation. The returned encoder instance should be used for * non-padding encoding operation. * Hope it is now clear enough. Personally I feel it might be clearer than an example like Base64.Encoder nonPaddingEncoder = Base64.getEncoder().withoutPadding(); Otherwise this looks good except that I wonder about needing to eagerly create all 6 Encoders. Given the non-padding encoder is supposed to not be used frequently as the standard one, and the encoder is really a simple/not-expensive object, I removed the singleton approach for the non-padding encoders. We can add any time later, if requested/ pointed out to be necessary. http://cr.openjdk.java.net/~sherman/8026330/webrev/ So are you trying to get this into 8 or are you thinking of holding this to 9? I hope it can get in, as it is requested couple weeks ago. But if it has to be cut off and leave for 9, then be it:-) thanks! -Sherman
Re: RFR 8025003: Base64 should be less strict with padding
Have you had a chance to think about this? Can the MIME decoder be made more lenient, or can I get an option to control this? Bill Shannon wrote on 10/25/13 15:24: Xueming Shen wrote on 10/25/13 15:19: On 10/25/13 2:19 PM, Bill Shannon wrote: If I understand this correctly, this proposes to remove the lenient option we've been discussing and just make it always lenient. Is that correct? Yes. Only for the mime type though. That's fine. Unfortunately, from what you say below, it's still not lenient enough. I'd really like a version that never, ever, for any reason, throws an exception. Yes, that means when you only get a final 6 bits of data you have to make an assumption about what was intended, probably padding it with zeros to 8 bits. This is something I'm hesitated to do. I can be lenient for the padding end because the padding character itself is not the real data, whether or not it's present, it's missing or it's incorrect/incomplete, it does not impact the integrity of the data. But to feed the last 6 bits with zero, is really kinda of guessing, NOT decoding. I understand. And if the people who write spamming software knew how to read a spec, we wouldn't have this problem! :-) Still, there's a lot of bad data out there on the internet, and people want the software to do the best job it can to interpret the data. It's better to guess at the missing 2 bits of data than to lose the last 6 bits of data.
Re: RFR: 8028041 Serialized Form description of j.l.String is not consistent with the implementation
Hi Stuart, I agree that {@docroot} is preferred. The serialization spec is in a parallel directory to the API spec. The platform/ docs are above the api docs, so at least 1 ../ is needed. I tried it with {@docroot}/../... but the normal docs build defaulted docroot to / and the link did not work. Roger On 11/8/2013 4:41 PM, Stuart Marks wrote: On 11/8/13 1:34 PM, Alan Bateman wrote: On 08/11/2013 20:56, roger riggs wrote: Please review this correction to the documentation of the serialized form of String. There is no change to the specification or behavior of the serialization of strings. It seemed safer to refer to the serialization specification and remove the incorrect details instead of trying to correct the incorrect details by adding more detail. Webrev: http://cr.openjdk.java.net/~rriggs/webrev-string-serial-8028041/ It make sense to reference the spec rather than duplicate how long strings are handled. So looks good to me (assuming the link works as expected when the docs are generated). Hi Roger, Yes, I agree with the approach of referencing the spec as well. On the link format, I'd recommend using {@docRoot} instead of a long chain of double dots. (Yes, this is used inconsistent in the javadoc. It's yet another thing to be cleaned up.) s'marks
Re: RFR (XS): 8027823: catchException combinator fails with 9 argument target
Reviewed. Thanks for the fix. The test case will also be a useful quick test for unboxed catchEx paths. — John On Nov 8, 2013, at 7:25 AM, Vladimir Ivanov vladimir.x.iva...@oracle.com wrote: http://cr.openjdk.java.net/~vlivanov/8027823/webrev.00/ MethodHandleImpl.makeGuardWithCatch has special invokers (GuardWithCatch.invoke_L*) for methods with arity up to 8. When method arity is larger, generic invoker (GuardWithCatch.invoke_V) is used. Generic invoker expects GuardWithCatch.target GuardWithCatch.catcher method handles to have (Object... av)Object type, but they can reference arbitrary methods, so type conversion is needed. makeSpreadArguments takes care of parameters' type conversion, but return type is left as is. That's the reason why GuardWithCatch.invoke_V fails to invoke both target or catcher. The fix is to add return type conversion on both paths. Testing: failing test, test/java/lang/invoke/ Thanks! Best regards, Vladimir Ivanov JBS: https://bugs.openjdk.java.net/browse/JDK-8027823 ___ mlvm-dev mailing list mlvm-...@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
hg: jdk8/tl/jdk: 8028041: Serialized Form description of j.l.String is not consistent with the implementation
Changeset: df2f7f288353 Author:rriggs Date: 2013-11-08 17:50 -0500 URL: http://hg.openjdk.java.net/jdk8/tl/jdk/rev/df2f7f288353 8028041: Serialized Form description of j.l.String is not consistent with the implementation Summary: Replaced incorrect description with reference to the serialization specification Reviewed-by: alanb, smarks ! src/share/classes/java/lang/String.java
Re: RFR (XS): 8027823: catchException combinator fails with 9 argument target
Thank you, John. Since I'm not a Committer in JDK8, I need a sponsor to push this fix. Any volunteers? :-) Will provide the changeset at first demand. Best regards, Vladimir Ivanov On 11/9/13 3:26 AM, John Rose wrote: Reviewed. Thanks for the fix. The test case will also be a useful quick test for unboxed catchEx paths. — John On Nov 8, 2013, at 7:25 AM, Vladimir Ivanov vladimir.x.iva...@oracle.com wrote: http://cr.openjdk.java.net/~vlivanov/8027823/webrev.00/ MethodHandleImpl.makeGuardWithCatch has special invokers (GuardWithCatch.invoke_L*) for methods with arity up to 8. When method arity is larger, generic invoker (GuardWithCatch.invoke_V) is used. Generic invoker expects GuardWithCatch.target GuardWithCatch.catcher method handles to have (Object... av)Object type, but they can reference arbitrary methods, so type conversion is needed. makeSpreadArguments takes care of parameters' type conversion, but return type is left as is. That's the reason why GuardWithCatch.invoke_V fails to invoke both target or catcher. The fix is to add return type conversion on both paths. Testing: failing test, test/java/lang/invoke/ Thanks! Best regards, Vladimir Ivanov JBS: https://bugs.openjdk.java.net/browse/JDK-8027823 ___ mlvm-dev mailing list mlvm-...@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
Re: RFR (XS): 8027823: catchException combinator fails with 9 argument target
I'll push it for you. — John On Nov 8, 2013, at 4:08 PM, Vladimir Ivanov vladimir.x.iva...@oracle.com wrote: Thank you, John. Since I'm not a Committer in JDK8, I need a sponsor to push this fix. Any volunteers? :-) Will provide the changeset at first demand. Best regards, Vladimir Ivanov On 11/9/13 3:26 AM, John Rose wrote: Reviewed. Thanks for the fix. The test case will also be a useful quick test for unboxed catchEx paths. — John On Nov 8, 2013, at 7:25 AM, Vladimir Ivanov vladimir.x.iva...@oracle.com wrote: http://cr.openjdk.java.net/~vlivanov/8027823/webrev.00/ MethodHandleImpl.makeGuardWithCatch has special invokers (GuardWithCatch.invoke_L*) for methods with arity up to 8. When method arity is larger, generic invoker (GuardWithCatch.invoke_V) is used. Generic invoker expects GuardWithCatch.target GuardWithCatch.catcher method handles to have (Object... av)Object type, but they can reference arbitrary methods, so type conversion is needed. makeSpreadArguments takes care of parameters' type conversion, but return type is left as is. That's the reason why GuardWithCatch.invoke_V fails to invoke both target or catcher. The fix is to add return type conversion on both paths. Testing: failing test, test/java/lang/invoke/ Thanks! Best regards, Vladimir Ivanov JBS: https://bugs.openjdk.java.net/browse/JDK-8027823 ___ mlvm-dev mailing list mlvm-...@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
hg: jdk8/tl/langtools: 4 new changesets
Changeset: fea486d30d41 Author:cl Date: 2013-10-31 12:36 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/langtools/rev/fea486d30d41 Added tag jdk8-b114 for changeset 850d2602ae98 ! .hgtags Changeset: 6b4d6205366c Author:lana Date: 2013-10-31 16:46 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/langtools/rev/6b4d6205366c Merge - test/tools/javac/ExtDirs/ext1/pkg1.jar - test/tools/javac/ExtDirs/ext2/pkg2.jar - test/tools/javac/ExtDirs/ext3/pkg1.jar - test/tools/javac/ExtDirs/ext3/pkg2.jar - test/tools/javac/T8019486/WrongLVTForLambdaTest.java Changeset: 3c040b04af05 Author:cl Date: 2013-11-07 08:16 -0800 URL: http://hg.openjdk.java.net/jdk8/tl/langtools/rev/3c040b04af05 Added tag jdk8-b115 for changeset 6b4d6205366c ! .hgtags Changeset: 21294feaf311 Author:lana Date: 2013-11-08 17:39 -0800 URL: http://hg.openjdk.java.net/jdk8/tl/langtools/rev/21294feaf311 Merge
hg: jdk8/tl/corba: 4 new changesets
Changeset: d425685e0b74 Author:cl Date: 2013-10-31 12:36 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/corba/rev/d425685e0b74 Added tag jdk8-b114 for changeset 0bbccf77c23e ! .hgtags Changeset: 8d07115924b7 Author:lana Date: 2013-10-31 16:30 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/corba/rev/8d07115924b7 Merge Changeset: 5fdc44652089 Author:cl Date: 2013-11-07 08:16 -0800 URL: http://hg.openjdk.java.net/jdk8/tl/corba/rev/5fdc44652089 Added tag jdk8-b115 for changeset 8d07115924b7 ! .hgtags Changeset: 4796555c4dc8 Author:lana Date: 2013-11-08 17:16 -0800 URL: http://hg.openjdk.java.net/jdk8/tl/corba/rev/4796555c4dc8 Merge
hg: jdk8/tl/jaxp: 3 new changesets
Changeset: d3b6da1b3e25 Author:cl Date: 2013-10-31 12:36 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/jaxp/rev/d3b6da1b3e25 Added tag jdk8-b114 for changeset 1b1e12117fe2 ! .hgtags Changeset: f610fd46463e Author:lana Date: 2013-10-31 16:31 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/jaxp/rev/f610fd46463e Merge Changeset: e757eb9aee3d Author:cl Date: 2013-11-07 08:16 -0800 URL: http://hg.openjdk.java.net/jdk8/tl/jaxp/rev/e757eb9aee3d Added tag jdk8-b115 for changeset f610fd46463e ! .hgtags
hg: jdk8/tl/jaxws: 2 new changesets
Changeset: e126d8eca69b Author:cl Date: 2013-10-31 12:36 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/jaxws/rev/e126d8eca69b Added tag jdk8-b114 for changeset 9ad289610fc6 ! .hgtags Changeset: 587560c222a2 Author:cl Date: 2013-11-07 08:16 -0800 URL: http://hg.openjdk.java.net/jdk8/tl/jaxws/rev/587560c222a2 Added tag jdk8-b115 for changeset e126d8eca69b ! .hgtags
hg: jdk8/tl: 3 new changesets
Changeset: b65d48f6938a Author:cl Date: 2013-10-31 12:36 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/rev/b65d48f6938a Added tag jdk8-b114 for changeset 4f2011496393 ! .hgtags Changeset: 763ada2a1d8c Author:lana Date: 2013-10-31 16:24 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/rev/763ada2a1d8c Merge Changeset: 40e892e2a4f2 Author:cl Date: 2013-11-07 08:16 -0800 URL: http://hg.openjdk.java.net/jdk8/tl/rev/40e892e2a4f2 Added tag jdk8-b115 for changeset 763ada2a1d8c ! .hgtags
hg: jdk8/tl/nashorn: 4 new changesets
Changeset: f109bb255b80 Author:cl Date: 2013-10-31 12:36 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/nashorn/rev/f109bb255b80 Added tag jdk8-b114 for changeset 79f7b79bf97b ! .hgtags Changeset: f0d3ac2474ee Author:lana Date: 2013-10-31 16:47 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/nashorn/rev/f0d3ac2474ee Merge - src/jdk/nashorn/internal/runtime/ScriptObjectListAdapter.java Changeset: 0fb1a427fbf6 Author:cl Date: 2013-11-07 08:16 -0800 URL: http://hg.openjdk.java.net/jdk8/tl/nashorn/rev/0fb1a427fbf6 Added tag jdk8-b115 for changeset f0d3ac2474ee ! .hgtags Changeset: d091499d67fc Author:lana Date: 2013-11-08 17:39 -0800 URL: http://hg.openjdk.java.net/jdk8/tl/nashorn/rev/d091499d67fc Merge
hg: jdk8/tl/hotspot: 37 new changesets
Changeset: ddc3758f68db Author:cl Date: 2013-10-31 12:36 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/hotspot/rev/ddc3758f68db Added tag jdk8-b114 for changeset 7fd913010dbb ! .hgtags Changeset: 205834867346 Author:lana Date: 2013-10-31 16:31 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/hotspot/rev/205834867346 Merge Changeset: f94a9f0746d8 Author:amurillo Date: 2013-10-25 13:43 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/hotspot/rev/f94a9f0746d8 8027173: new hotspot build - hs25-b57 Reviewed-by: jcoomes ! make/hotspot_version Changeset: e64f1fe9756b Author:farvidsson Date: 2013-10-24 10:02 +0200 URL: http://hg.openjdk.java.net/jdk8/tl/hotspot/rev/e64f1fe9756b 8024423: JVMTI: GetLoadedClasses doesn't enumerate anonymous classes Summary: Rewrite of the getLoadedClasses() method implementation to include anonymous classes. Reviewed-by: coleenp, sspitsyn ! src/share/vm/classfile/classLoaderData.cpp ! src/share/vm/classfile/classLoaderData.hpp ! src/share/vm/oops/instanceKlass.cpp ! src/share/vm/prims/jvmtiGetLoadedClasses.cpp Changeset: d70a665e25d7 Author:iklam Date: 2013-10-24 22:19 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/hotspot/rev/d70a665e25d7 8020753: JNI_CreateJavaVM on Mac OSX 10.9 Mavericks corrupts the callers stack size Summary: Use hard-coded DEFAULT_MAIN_THREAD_STACK_PAGES = 2048 for 10.9 Reviewed-by: dcubed, iveresov Contributed-by: gerard.ziem...@oracle.com ! src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp Changeset: e4f478e7781b Author:jbachorik Date: 2013-10-25 09:07 +0200 URL: http://hg.openjdk.java.net/jdk8/tl/hotspot/rev/e4f478e7781b 8027294: Prepare hotspot for non TOD based uptime counter Summary: Use HR timer when available for os::elapsed_counter() on linux/bsd. Add a new counter for the JVM uptime. Reviewed-by: dholmes, sla ! src/os/bsd/vm/os_bsd.cpp ! src/os/linux/vm/os_linux.cpp ! src/share/vm/services/jmm.h ! src/share/vm/services/management.cpp Changeset: a6177f601c64 Author:hseigel Date: 2013-10-25 11:05 -0400 URL: http://hg.openjdk.java.net/jdk8/tl/hotspot/rev/a6177f601c64 8026822: metaspace/flags/maxMetaspaceSize throws OOM of unexpected type.java.lang.OutOfMemoryError: Compressed class space Summary: Incorporate chunk size when seeing if OutOfMemoryError was caused by Metaspace or Compressed class space. Reviewed-by: stefank, coleenp ! src/share/vm/memory/metaspace.cpp ! src/share/vm/memory/metaspace.hpp ! src/share/vm/memory/universe.cpp Changeset: 634715d59d9e Author:hseigel Date: 2013-10-25 11:13 -0400 URL: http://hg.openjdk.java.net/jdk8/tl/hotspot/rev/634715d59d9e Merge Changeset: 209aa13ab8c0 Author:coleenp Date: 2013-10-25 15:19 -0400 URL: http://hg.openjdk.java.net/jdk8/tl/hotspot/rev/209aa13ab8c0 8024927: Nashorn performance regression with CompressedOops Summary: Allocate compressed class space at end of Java heap. For small heap sizes, without CDS, save some space so compressed classes can have the same favorable compression as oops Reviewed-by: stefank, hseigel, goetz ! src/cpu/sparc/vm/macroAssembler_sparc.cpp ! src/cpu/sparc/vm/sparc.ad ! src/cpu/x86/vm/macroAssembler_x86.cpp ! src/share/vm/memory/metaspace.cpp ! src/share/vm/memory/metaspace.hpp ! src/share/vm/memory/universe.cpp ! src/share/vm/utilities/globalDefinitions.hpp + test/runtime/CompressedOops/CompressedClassPointers.java Changeset: b4aa8fc5d0d5 Author:ccheung Date: 2013-10-25 22:06 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/hotspot/rev/b4aa8fc5d0d5 Merge ! src/cpu/sparc/vm/macroAssembler_sparc.cpp ! src/cpu/sparc/vm/sparc.ad ! src/share/vm/memory/metaspace.cpp - test/compiler/intrinsics/mathexact/CondTest.java - test/compiler/intrinsics/mathexact/ConstantTest.java - test/compiler/intrinsics/mathexact/LoadTest.java - test/compiler/intrinsics/mathexact/LoopDependentTest.java - test/compiler/intrinsics/mathexact/NonConstantTest.java - test/compiler/intrinsics/mathexact/RepeatTest.java Changeset: 1a04de1aaedb Author:dsamersoff Date: 2013-10-28 21:41 +0400 URL: http://hg.openjdk.java.net/jdk8/tl/hotspot/rev/1a04de1aaedb 8026950: Nits in agent ps_proc.c file breaks compilation of open hotspot Summary: Fixed two compilation-breaking nits Reviewed-by: sla, dholmes ! agent/src/os/bsd/ps_proc.c Changeset: 85730a185147 Author:ccheung Date: 2013-10-30 14:02 -0700 URL: http://hg.openjdk.java.net/jdk8/tl/hotspot/rev/85730a185147 Merge Changeset: 292050e5d5ea Author:dholmes Date: 2013-10-24 00:33 -0400 URL: http://hg.openjdk.java.net/jdk8/tl/hotspot/rev/292050e5d5ea 8026877: Error in opening JAR file when invalid jar specified with -Xbootclasspath/a on OpenJDK build Reviewed-by: coleenp, twisti ! src/share/vm/classfile/systemDictionary.hpp ! src/share/vm/runtime/thread.cpp Changeset: 066778844ed9 Author:jprovino Date: 2013-10-27 14:11 -0400 URL: