From 8020d151275b5ea7841bafe7e6ff1c78c5eec419 Mon Sep 17 00:00:00 2001 From: apoorvr Date: Tue, 23 Jun 2026 16:05:58 +0530 Subject: [PATCH] FELIX-6845: Guard against null bundle in Log.serviceChanged() to prevent NPE during service unregistration race condition When ServiceRegistration.setProperties() is called during bundle teardown, Felix fires a ServiceEvent.MODIFIED to all ServiceListeners including Log. At that point ServiceReference.getBundle() may return null per the OSGi spec if the registering bundle has already been unregistered, causing an NPE in Log.serviceChanged() when dereferencing the bundle for its symbolic name. Fix: extract bundle reference and return early if null. --- log/src/main/java/org/apache/felix/log/Log.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/log/src/main/java/org/apache/felix/log/Log.java b/log/src/main/java/org/apache/felix/log/Log.java index 4ab9610d05..dcb1fd4ef8 100644 --- a/log/src/main/java/org/apache/felix/log/Log.java +++ b/log/src/main/java/org/apache/felix/log/Log.java @@ -322,9 +322,15 @@ public void serviceChanged(final ServiceEvent event) } } + final Bundle bundle = event.getServiceReference().getBundle(); + if (bundle == null) + { + return; + } + log( - "Events.Service.".concat(event.getServiceReference().getBundle().getSymbolicName()), - event.getServiceReference().getBundle(), + "Events.Service.".concat(bundle.getSymbolicName()), + bundle, event.getServiceReference(), (eventType == ServiceEvent.MODIFIED) ? LogLevel.DEBUG : LogLevel.INFO, message,