Return-Path: X-Original-To: apmail-felix-commits-archive@www.apache.org Delivered-To: apmail-felix-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8BE2C18664 for ; Tue, 28 Apr 2015 09:44:44 +0000 (UTC) Received: (qmail 62822 invoked by uid 500); 28 Apr 2015 09:44:44 -0000 Delivered-To: apmail-felix-commits-archive@felix.apache.org Received: (qmail 62770 invoked by uid 500); 28 Apr 2015 09:44:44 -0000 Mailing-List: contact commits-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list commits@felix.apache.org Received: (qmail 62761 invoked by uid 99); 28 Apr 2015 09:44:44 -0000 Received: from eris.apache.org (HELO hades.apache.org) (140.211.11.105) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 28 Apr 2015 09:44:44 +0000 Received: from hades.apache.org (localhost [127.0.0.1]) by hades.apache.org (ASF Mail Server at hades.apache.org) with ESMTP id 1CD2EAC0623 for ; Tue, 28 Apr 2015 09:44:44 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1676459 - /felix/trunk/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/LogServiceTracker.java Date: Tue, 28 Apr 2015 09:44:43 -0000 To: commits@felix.apache.org From: cziegeler@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20150428094444.1CD2EAC0623@hades.apache.org> Author: cziegeler Date: Tue Apr 28 09:44:43 2015 New Revision: 1676459 URL: http://svn.apache.org/r1676459 Log: FELIX-4870 : sslfilter implementation assumes there is only one log service Modified: felix/trunk/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/LogServiceTracker.java Modified: felix/trunk/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/LogServiceTracker.java URL: http://svn.apache.org/viewvc/felix/trunk/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/LogServiceTracker.java?rev=1676459&r1=1676458&r2=1676459&view=diff ============================================================================== --- felix/trunk/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/LogServiceTracker.java (original) +++ felix/trunk/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/LogServiceTracker.java Tue Apr 28 09:44:43 2015 @@ -18,35 +18,55 @@ */ package org.apache.felix.http.sslfilter.internal; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.TreeMap; + import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; import org.osgi.service.log.LogService; import org.osgi.util.tracker.ServiceTracker; /** - * TODO - this implementation assumes that there is exactly one LogService + * * * @author Felix Project Team */ public class LogServiceTracker extends ServiceTracker { + private final Map logServices = new TreeMap(Collections.reverseOrder()); + public LogServiceTracker(BundleContext context) { super(context, LogService.class.getName(), null); } @Override - public Object addingService(ServiceReference reference) + public Object addingService(final ServiceReference reference) { - LogService result = (LogService) super.addingService(reference); - SystemLogger.setLogService(result); + final LogService result = (LogService) super.addingService(reference); + if ( result != null ) { + synchronized ( logServices ) { + logServices.put(reference, result); + SystemLogger.setLogService(logServices.values().iterator().next()); + } + } return result; } @Override - public void removedService(ServiceReference reference, Object service) + public void removedService(final ServiceReference reference, final Object service) { - SystemLogger.setLogService(null); + synchronized ( logServices ) { + logServices.remove(reference); + final Collection services = logServices.values(); + if ( services.isEmpty() ) { + SystemLogger.setLogService(null); + } else { + SystemLogger.setLogService(services.iterator().next()); + } + } super.removedService(reference, service); } }