On 5/04/2013 11:27 AM, Mani Sarkar wrote:
Hi David,

I'll reply in more detail later but to respond to your comment on:

 > I would not add the extra methods around the cdl.await() and
cdl.countDown() as they just obscure things
In general its meant to do the opposite. We come across a lot of code
that does not express intent, and the purpose of encapsulating such
blocks (even if its a single line) is to make the flow verbose and
readable - I have seen similar code-snippets in the Hotspot (C/C++
codebase) making it easy to follow what is going on. One of the things I
picked up from TestFest was to make the tests more legible, logical and
easy to maintain and scale - it was our intent when we changed this test.

Sorry, createNoiseHasFinishedAddingToKeep is certainly verbose but not readable. This would be much more readable:

Countdownlatch noiseComplete = new ...
createNoise(noiseComplete);
...
noiseComplete.await();

and:

static void createNoise(final CountDownLatch complete) throws
       InterruptedException {
   ...
   complete.countDown();
}

just giving the latch a meaningful name is sufficient to convey intent.

Note: in this example a Semaphore is probably a better choice than a CountDownLatch.

Cheers,
David

I'll come back with responses for your other comments.

Cheers
mani

On Fri, Apr 5, 2013 at 2:07 AM, David Holmes <david.hol...@oracle.com
<mailto:david.hol...@oracle.com>> wrote:

    Hi Mani,

    Patches came through ok.

    I would not add the extra methods around the cdl.await() and
    cdl.countDown() as they just obscure things in my opinion. But that
    aside the latch is not needed. The fork() method starts a thread and
    joins it. So when createNoise() returns we already know for certain
    that the "noise has been created". What the sleep is doing is giving
    the GC a chance to run.

    David


    On 5/04/2013 10:55 AM, Mani Sarkar wrote:

        Thanks David,

        Here are the patches, let me know if they have come in fine:

        1) test/java/lang/ref/Basic.____java.patch - changed to not use

        Thread.sleep() any more rather use the
        java.util.concurrent.____CountdownLatch
        functionality
        Authors: Mani (sadhak...@gmail.com <mailto:sadhak...@gmail.com>
        <mailto:sadhak...@gmail.com <mailto:sadhak...@gmail.com>>) and

        Edward Yue Shung Wong (edward.ys.w...@gmail.com
        <mailto:edward.ys.w...@gmail.com>
        <mailto:edward.ys.wong@gmail.__com
        <mailto:edward.ys.w...@gmail.com>>)

        ------------x---------------
        diff -r 38e1821c4472 test/java/lang/ref/Basic.java
        --- a/test/java/lang/ref/Basic.__javaWed Mar 06 18:35:51 2013 +0100
        +++ b/test/java/lang/ref/Basic.__javaSat Mar 23 14:51:25 2013 +0000

        @@ -29,7 +29,7 @@
           import java.lang.ref.*;
           import java.util.Vector;
        -
        +import java.util.concurrent.__CountDownLatch;
           public class Basic {
        @@ -64,22 +64,22 @@
                   fork(new Runnable() {
                       public void run() {
                           System.err.println("__References: W " + rw.get()
        -                                   + ", W2 " + rw2.get()
        -                                   + ", P " + rp.get()
        -                                   + ", P2 " + rp2.get());
        +                        + ", W2 " + rw2.get()
        +                        + ", P " + rp.get()
        +                        + ", P2 " + rp2.get());
                       }
                   });
               }
        -    static void createNoise() throws InterruptedException {
        +    static void createNoise(final CountDownLatch cdl) throws
        InterruptedException {
                   fork(new Runnable() {
                       public void run() {
                           keep.addElement(new PhantomReference(new
        Object(), q2));
        +                createNoiseHasFinishedAddingTo__Keep(cdl);
                       }
                   });
               }
        -
               public static void main(String[] args) throws Exception {
                   fork(new Runnable() {
        @@ -97,13 +97,16 @@
                   int ndq = 0;
                   boolean prevFinalized = false;
        -    outer:
        +        outer:
                   for (int i = 1;; i++) {
                       Reference r;
        -            createNoise();
        +            CountDownLatch inQueueWaitLatch = new
        CountDownLatch(1);
        +            createNoise(inQueueWaitLatch);
        +
                       System.err.println("GC " + i);
        -            Thread.sleep(10);
        +            waitUntilCreateNoiseHasFinishe__d(inQueueWaitLatch);
        +
                       System.gc();
                       System.runFinalization();
        @@ -137,7 +140,7 @@
                   if (ndq != 3) {
                       throw new Exception("Expected to dequeue 3
        reference objects,"
        -                                + " but only got " + ndq);
        +                    + " but only got " + ndq);
                   }
                   if (! Basic.finalized) {
        @@ -146,4 +149,13 @@
               }
        +
        +    private static void
        createNoiseHasFinishedAddingTo__Keep(CountDownLatch cdl) {
        +        cdl.countDown();
        +    }
        +
        +    private static void
        waitUntilCreateNoiseHasFinishe__d(CountDownLatch
        cdl) throws InterruptedException {
        +        cdl.await();
        +    }
        +
           }
        ------------x----------------
        2) test/java/lang/Runtime/exec/____LotsOfOutput.java.patch -
        refactor-ing

        and tidy-ing of existing code (removing string literals and
        replacing
        with constants, etc...)

        Author: Edward Yue Shung Wong (edward.ys.w...@gmail.com
        <mailto:edward.ys.w...@gmail.com>
        <mailto:edward.ys.wong@gmail.__com
        <mailto:edward.ys.w...@gmail.com>>)

        ------------x----------------
        diff -r 38e1821c4472 test/java/lang/Runtime/exec/__LotsOfOutput.java
        --- a/test/java/lang/Runtime/exec/__LotsOfOutput.javaWed Mar 06
        18:35:51
        2013 +0100
        +++ b/test/java/lang/Runtime/exec/__LotsOfOutput.javaSat Mar 23
        15:48:46

        2013 +0000
        @@ -33,17 +33,24 @@
           public class LotsOfOutput {
               static final String CAT = "/usr/bin/cat";
        -    public static void main(String[] args) throws Exception{
        -        if (File.separatorChar == '\\' ||                // Windows
        -                                !new File(CAT).exists()) // no cat
        +    static final int MEMORY_GROWTH_LIMIT = 1000000;
        +
        +    public static void main(String[] args) throws Exception {
        +        if (isWindowsOrCatNotAvailable()) {
                       return;
        +        }
        +
                   Process p = Runtime.getRuntime().exec(CAT + "
        /dev/zero");
                   long initMemory = Runtime.getRuntime().__totalMemory();
        -        for (int i=1; i< 10; i++) {
        +        for (int i = 1; i < 10; i++) {
                       Thread.sleep(100);
        -            if (Runtime.getRuntime().__totalMemory() >
        initMemory + 1000000)
        -                throw new Exception("Process consumes memory.");
        +            if (Runtime.getRuntime().__totalMemory() > initMemory +
        MEMORY_GROWTH_LIMIT)
        +                throw new Exception("Runtime memory has grown more
        than: " + MEMORY_GROWTH_LIMIT);
                   }
               }
        +
        +    private static boolean isWindowsOrCatNotAvailable() {
        +        return File.separatorChar == '\\' || !new
        File(CAT).exists();
        +    }
           }
        ------------x----------------

        Any queries please let me know.

        Thanks.

        Regards,
        mani

        On Fri, Apr 5, 2013 at 1:38 AM, David Holmes
        <david.hol...@oracle.com <mailto:david.hol...@oracle.com>
        <mailto:david.holmes@oracle.__com
        <mailto:david.hol...@oracle.com>>> wrote:

             Hi Mani,

             Attachments get stripped so you will need to inline the
        patches in
             your email to the list.

             Thanks,
             David


             On 5/04/2013 9:07 AM, Mani Sarkar wrote:

                 Hi all,

                 I'd like to rectify that I;m a contributor (and not a
        committer as
                 mentioned earlier), so I don't have access to the
        webrev system
                 but would
                 love to have these patches hosted on them when a
        sponsor becomes
                 available.

                 Cheers,
                 mani

                 On Thu, Apr 4, 2013 at 11:57 PM, Mani Sarkar
                 <sadhak...@gmail.com <mailto:sadhak...@gmail.com>
        <mailto:sadhak...@gmail.com <mailto:sadhak...@gmail.com>>> wrote:

                     Hi all,

                     During #TestFest in London last month we hacked away on
                     jtreg and tests in
                     the OpenJDK. Myself and another participant managed to
                     change two unit
                     tests. I haven't looked for a sponsor in the past
        so I'm
                     fairly new to the
                     process, hence my email on the list is to request for
                     someone to review,
                     and process these patches further. I'm a committer
        (signed OCA).

                     Here's details of the changes made to the tests
        under the
                     .*./jdk8_tl/jdk*folders:

                     1) *test/java/lang/ref/Basic.____java.patch* -
        changed to not use


                     Thread.sleep() any more rather use the
                     java.util.concurrent.____CountdownLatch
                     functionality
                     2)
        *test/java/lang/Runtime/exec/____LotsOfOutput.java.patch* -

                     refactor-ing

                     and tidy-ing of existing code (removing string
        literals and
                     replacing with
                     constants, etc...)

                     Please let me know what you would like me to do
        next with
                     these patches.

                     Regards,
                     mani

                     --
                     *Twitter:* @theNeomatrix369
                     *Blog:* http://neomatrix369.wordpress.____com

                     <http://neomatrix369.__wordpress.com
        <http://neomatrix369.wordpress.com>>
                     *JUG activity:* LJC Advocate (@adoptopenjdk &
        @adoptajsr
                     programs)
                     *Meet-a-Project:*
        https://github.com/____MutabilityDetector
        <https://github.com/__MutabilityDetector>

                     <https://github.com/__MutabilityDetector
        <https://github.com/MutabilityDetector>>
                     *Devoxx UK 2013 was a grand success:*
        http://www.devoxx.com/display/____UK13/Home
        <http://www.devoxx.com/display/__UK13/Home>

                     <http://www.devoxx.com/__display/UK13/Home
        <http://www.devoxx.com/display/UK13/Home>>
                     *Don't chase success, rather aim for "Excellence", and
                     success will come
                     chasing after you!*







        --
        *Twitter:* @theNeomatrix369
        *Blog:* http://neomatrix369.wordpress.__com
        <http://neomatrix369.wordpress.com>
        *JUG activity:* LJC Advocate (@adoptopenjdk & @adoptajsr programs)
        *Meet-a-Project:* https://github.com/__MutabilityDetector
        <https://github.com/MutabilityDetector>
        *Devoxx UK 2013 was a grand success:*
        http://www.devoxx.com/display/__UK13/Home
        <http://www.devoxx.com/display/UK13/Home>
        */Don't chase success, rather aim for "Excellence", and success will
        come chasing after you!/*




--
*Twitter:* @theNeomatrix369
*Blog:* http://neomatrix369.wordpress.com
*JUG activity:* LJC Advocate (@adoptopenjdk & @adoptajsr programs)
*Meet-a-Project:* https://github.com/MutabilityDetector
*Devoxx UK 2013 was a grand success:*
http://www.devoxx.com/display/UK13/Home
*/Don't chase success, rather aim for "Excellence", and success will
come chasing after you!/*

Reply via email to