Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 33043200C7F for ; Wed, 24 May 2017 23:44:01 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 3191E160BB6; Wed, 24 May 2017 21:44:01 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 5138C160BA5 for ; Wed, 24 May 2017 23:44:00 +0200 (CEST) Received: (qmail 17577 invoked by uid 500); 24 May 2017 21:43:59 -0000 Mailing-List: contact commits-help@aries.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@aries.apache.org Delivered-To: mailing list commits@aries.apache.org Received: (qmail 17566 invoked by uid 99); 24 May 2017 21:43:59 -0000 Received: from Unknown (HELO svn01-us-west.apache.org) (209.188.14.144) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 24 May 2017 21:43:59 +0000 Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 0C23D3A039E for ; Wed, 24 May 2017 21:43:59 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1796109 - in /aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal: JustOSGiImpl.java OSGiImpl.java OnCloseOSGiImpl.java ServiceRegistrationOSGiImpl.java Date: Wed, 24 May 2017 21:43:59 -0000 To: commits@aries.apache.org From: csierra@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20170524214359.0C23D3A039E@svn01-us-west.apache.org> archived-at: Wed, 24 May 2017 21:44:01 -0000 Author: csierra Date: Wed May 24 21:43:58 2017 New Revision: 1796109 URL: http://svn.apache.org/viewvc?rev=1796109&view=rev Log: Symetrically signal object deregistration before closing so foreach and other usages work as expected. Modified: aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/JustOSGiImpl.java aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OnCloseOSGiImpl.java aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceRegistrationOSGiImpl.java Modified: aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/JustOSGiImpl.java URL: http://svn.apache.org/viewvc/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/JustOSGiImpl.java?rev=1796109&r1=1796108&r2=1796109&view=diff ============================================================================== --- aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/JustOSGiImpl.java (original) +++ aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/JustOSGiImpl.java Wed May 24 21:43:58 2017 @@ -39,9 +39,16 @@ public class JustOSGiImpl extends OSG Consumer> source = added.getSource(); + Pipe, Tuple> removed = Pipe.create(); + + Consumer> removedSource = removed.getSource(); + + Tuple tuple = Tuple.create(t); + return new OSGiResultImpl<>( - added, Pipe.create(), - () -> source.accept(Tuple.create(t)), OSGi.NOOP); + added, removed, + () -> source.accept(tuple), + () -> removedSource.accept(tuple)); })); _t = t; @@ -54,21 +61,37 @@ public class JustOSGiImpl extends OSG Consumer> addedSource = added.getSource(); + Pipe, Tuple> removed = Pipe.create(); + + Consumer> removedSource = removed.getSource(); + AtomicReference> atomicReference = new AtomicReference<>(null); + AtomicReference> tupleReference = + new AtomicReference<>(); return new OSGiResultImpl<>( - added, Pipe.create(), + added, removed, () -> { OSGi next = fun.apply(_t); atomicReference.set( next.run( bundleContext, - s -> addedSource.accept(Tuple.create(s)))); + s -> { + Tuple tuple = Tuple.create(s); + + tupleReference.set(tuple); + + addedSource.accept(tuple); + })); }, - () -> atomicReference.get().close()); + () -> { + removedSource.accept(tupleReference.get()); + + atomicReference.get().close(); + }); }); } } Modified: aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java URL: http://svn.apache.org/viewvc/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java?rev=1796109&r1=1796108&r2=1796109&view=diff ============================================================================== --- aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java (original) +++ aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java Wed May 24 21:43:58 2017 @@ -60,8 +60,15 @@ public class OSGiImpl implements OSGi Consumer> addedSource = added.getSource(); + Pipe, Tuple> removed = Pipe.create(); + + Consumer> removedSource = removed.getSource(); + + AtomicReference> tupleAtomicReference = + new AtomicReference<>(); + OSGiResultImpl osgiResult = new OSGiResultImpl<>( - added, Pipe.create(), null, + added, removed, null, () -> { synchronized (identities) { identities.values().forEach(OSGiResult::close); @@ -80,7 +87,13 @@ public class OSGiImpl implements OSGi OSGiResult or2 = program.run( bundleContext, - s -> addedSource.accept(Tuple.create(s))); + s -> { + Tuple tuple = Tuple.create(s); + + tupleAtomicReference.set(tuple); + + addedSource.accept(tuple); + }); identities.put(t.original, or2); @@ -92,6 +105,8 @@ public class OSGiImpl implements OSGi OSGiResult osgiResult1 = identities.remove(t.original); + removedSource.accept(tupleAtomicReference.get()); + if (osgiResult1 != null) { osgiResult1.close(); } Modified: aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OnCloseOSGiImpl.java URL: http://svn.apache.org/viewvc/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OnCloseOSGiImpl.java?rev=1796109&r1=1796108&r2=1796109&view=diff ============================================================================== --- aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OnCloseOSGiImpl.java (original) +++ aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OnCloseOSGiImpl.java Wed May 24 21:43:58 2017 @@ -24,12 +24,20 @@ public class OnCloseOSGiImpl extends OSG public OnCloseOSGiImpl(Runnable action) { super(bundleContext -> { - Pipe, Tuple> pipe = Pipe.create(); + Pipe, Tuple> added = Pipe.create(); + + Pipe, Tuple> removed = Pipe.create(); + + Tuple tuple = Tuple.create(null); return new OSGiResultImpl<>( - pipe, Pipe.create(), - () -> pipe.getSource().accept(Tuple.create(null)), - action::run); + added, removed, + () -> added.getSource().accept(tuple), + () -> { + action.run(); + removed.getSource().accept(tuple); + } + ); }); } } Modified: aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceRegistrationOSGiImpl.java URL: http://svn.apache.org/viewvc/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceRegistrationOSGiImpl.java?rev=1796109&r1=1796108&r2=1796109&view=diff ============================================================================== --- aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceRegistrationOSGiImpl.java (original) +++ aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceRegistrationOSGiImpl.java Wed May 24 21:43:58 2017 @@ -47,8 +47,14 @@ public class ServiceRegistrationOSGiImpl Tuple> tuple = Tuple.create( serviceRegistration); + Pipe>, Tuple>> + removed = Pipe.create(); + + Consumer>> removedSource = + removed.getSource(); + return new OSGiResultImpl<>( - added, Pipe.create(), + added, removed, () -> addedSource.accept(tuple), () -> { try { @@ -56,6 +62,9 @@ public class ServiceRegistrationOSGiImpl } catch (Exception e) { } + finally { + removedSource.accept(tuple); + } }); }); }