You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2016/01/28 12:49:26 UTC

svn commit: r1727311 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboard.java test/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboardTest.java

Author: chetanm
Date: Thu Jan 28 11:49:25 2016
New Revision: 1727311

URL: http://svn.apache.org/viewvc?rev=1727311&view=rev
Log:
OAK-3944 - OsgiWhiteboard should handle multiple unregister call

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboard.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboardTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboard.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboard.java?rev=1727311&r1=1727310&r2=1727311&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboard.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboard.java Thu Jan 28 11:49:25 2016
@@ -75,10 +75,14 @@ public class OsgiWhiteboard implements W
         final ServiceRegistration registration =
                 context.registerService(type.getName(), service, dictionary);
         return new Registration() {
+            private boolean unregistered;
             @Override
             public void unregister() {
                 try {
-                    registration.unregister();
+                    if (!unregistered) {
+                        registration.unregister();
+                        unregistered = true;
+                    }
                 } catch (IllegalStateException ex) {
                     log.warn("Error unregistering service: {} of type {}",
                             service, type.getName(), ex);

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboardTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboardTest.java?rev=1727311&r1=1727310&r2=1727311&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboardTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboardTest.java Thu Jan 28 11:49:25 2016
@@ -17,13 +17,17 @@
 
 package org.apache.jackrabbit.oak.osgi;
 
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.concurrent.atomic.AtomicBoolean;
 
+import ch.qos.logback.classic.Level;
+import org.apache.jackrabbit.oak.commons.junit.LogCustomizer;
 import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
 import org.junit.Test;
 import org.osgi.framework.BundleContext;
@@ -37,6 +41,8 @@ public class OsgiWhiteboardTest {
      */
     @Test
     public void testDoubleUnregister() {
+        LogCustomizer logs = LogCustomizer.forLogger(OsgiWhiteboard.class.getName())
+                .filter(Level.WARN).create();
         BundleContext bundleContext = mock(BundleContext.class);
         OsgiWhiteboard w = new OsgiWhiteboard(bundleContext);
 
@@ -47,17 +53,16 @@ public class OsgiWhiteboardTest {
             }
         };
 
+        final AtomicBoolean unregistered = new AtomicBoolean();
         ServiceRegistration sr = new ServiceRegistration() {
 
-            boolean isUnregistering = false;
-
             @Override
             public void unregister() {
-                if (isUnregistering) {
+                if (unregistered.get()) {
                     throw new IllegalStateException(
                             "Service already unregistered.");
                 }
-                isUnregistering = true;
+                unregistered.set(true);
             }
 
             @Override
@@ -76,7 +81,13 @@ public class OsgiWhiteboardTest {
         Registration reg = w.register(Runnable.class, r,
                 new HashMap<String, Object>());
         reg.unregister();
+
+        assertTrue(unregistered.get());
+        logs.starting();
         reg.unregister();
+        logs.finished();
+
+        assertTrue(logs.getLogs().isEmpty());
     }
 
 }



Re: svn commit: r1727311 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboard.java test/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboardTest.java

Posted by Chetan Mehrotra <ch...@gmail.com>.
On Fri, Jan 29, 2016 at 4:08 PM, Michael Dürig <md...@apache.org> wrote:
>
> Shouldn't we make this volatile?

Ack. Would do that

Chetan Mehrotra

Re: svn commit: r1727311 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboard.java test/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboardTest.java

Posted by Michael Dürig <md...@apache.org>.

On 28.1.16 12:49 , chetanm@apache.org wrote:
> URL:http://svn.apache.org/viewvc?rev=1727311&view=rev
> Log:
> OAK-3944 - OsgiWhiteboard should handle multiple unregister call
>
> Modified:
>      jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboard.java
>      jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboardTest.java
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboard.java
> URL:http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboard.java?rev=1727311&r1=1727310&r2=1727311&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboard.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiWhiteboard.java Thu Jan 28 11:49:25 2016
> @@ -75,10 +75,14 @@ public class OsgiWhiteboard implements W
>           final ServiceRegistration registration =
>                   context.registerService(type.getName(), service, dictionary);
>           return new Registration() {
> +            private boolean unregistered;

Shouldn't we make this volatile?

Michael