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