Buggy code:
final class RemoteOSGiServiceImpl implements RemoteOSGiService , Remoting { static boolean IS_JAVA5 = false ; static boolean IS_R4 = false ; private static final Method getEntry ; private static final Method getEntryPaths ; private static final File base ; static int R_OSGI_PORT = 9278 ; static final String R_OSGi_PORT_PROPERTY = "ch.ethz.iks.r_osgi.port" ; static final String REGISTER_DEFAULT_TCP_CHANNEL = "ch.ethz.iks.r_osgi.registerDefaultChannel" ; static final String THREADS_PER_ENDPOINT = "ch.ethz.iks.r_osgi.threadsPerEndpoint" ; static final String PROXY_DEBUG_PROPERTY = "ch.ethz.iks.r_osgi.debug.proxyGeneration" ; static final String MSG_DEBUG_PROPERTY = "ch.ethz.iks.r_osgi.debug.messages" ; static final String DEBUG_PROPERTY = "ch.ethz.iks.r_osgi.debug.internal" ; static final String R_OSGi_INTERNAL = "internal" ; private static final String MANIFEST_FILE_NAME = "META-INF//MANIFEST.MF" ; private static final String SEPARATOR_CHAR = "//" ; private static final int BUFFER_SIZE = 2048 ; static final int MAX_THREADS_PER_ENDPOINT = Integer . getInteger ( RemoteOSGiServiceImpl . THREADS_PER_ENDPOINT , 2 ) . intValue ( ) ; static boolean PROXY_DEBUG ; static boolean MSG_DEBUG ; static boolean DEBUG ; static String MY_ADDRESS ; static Map serviceRegistrations = new HashMap ( 1 ) ; private static int nextXid ; static LogService log ; static ServiceTracker eventAdminTracker ; private static ServiceTracker eventHandlerTracker ; private static ServiceTracker remoteServiceTracker ; private static ServiceTracker remoteServiceListenerTracker ; private static ServiceTracker networkChannelFactoryTracker ; private static ServiceTracker serviceDiscoveryHandlerTracker ; private static Map channels = new HashMap ( 0 ) ; private static Map multiplexers = new HashMap ( 0 ) ; private static PackageAdmin pkgAdmin ; RemoteOSGiServiceImpl ( ) throws IOException { } private void setupTrackers ( final BundleContext context ) throws IOException { } private NetworkChannelFactory getNetworkChannelFactory ( final String protocol ) throws RemoteOSGiException { } public RemoteServiceReference [ ] connect ( final URI uri ) throws RemoteOSGiException , IOException { } public int getListeningPort ( final String protocol ) throws RemoteOSGiException { } public void disconnect ( final URI endpoint ) throws RemoteOSGiException { } public RemoteServiceReference getRemoteServiceReference ( final URI serviceURI ) { } public RemoteServiceReference [ ] getRemoteServiceReferences ( final URI service , final String clazz , final Filter filter ) { } public Object getRemoteService ( final RemoteServiceReference ref ) { } public Object getRemoteServiceBundle ( final RemoteServiceReference ref , final int timeout ) throws InterruptedException { } private ServiceReference getFetchedServiceReference ( final RemoteServiceReference ref ) { } private void fetchService ( final RemoteServiceReference ref ) throws RemoteOSGiException { } static ChannelEndpointImpl getChannel ( final URI uri ) { } public ChannelEndpoint getEndpoint ( final String uri ) { } public ChannelEndpointManager getEndpointManager ( final URI remoteEndpointAddress ) { } private ChannelEndpointMultiplexer getMultiplexer ( final String uri ) { final String channel = RemoteOSGiServiceImpl . getChannelURI ( URI . create ( uri ) ) ; ChannelEndpointMultiplexer multiplexer = ( ( ChannelEndpointMultiplexer ) ( RemoteOSGiServiceImpl . multiplexers . get ( channel ) ) ) ; <START_BUG> if ( ( multiplexer == null ) || ( multiplexer . isConnected ( ) ) ) { <END_BUG> multiplexer = new ChannelEndpointMultiplexer ( ( ( ChannelEndpointImpl ) ( RemoteOSGiServiceImpl . channels . get ( channel ) ) ) ) ; RemoteOSGiServiceImpl . multiplexers . put ( channel , multiplexer ) ; } return multiplexer ; } private static String getChannelURI ( final URI serviceURI ) { } void cleanup ( ) { } static RemoteServiceRegistration [ ] getServices ( ) { } static RemoteServiceRegistration getServiceRegistration ( final String serviceID ) { } static String [ ] getTopics ( ) { } static synchronized int nextXid ( ) { } static void registerChannelEndpoint ( final ChannelEndpoint channel ) { } static void unregisterChannelEndpoint ( final String channelURI ) { } static void updateLeases ( final LeaseUpdateMessage msg ) { } static void notifyRemoteServiceListeners ( final RemoteServiceEvent event ) { } private static void match ( final ServiceReference ref , final RemoteServiceEvent event ) { } void registerWithServiceDiscovery ( final RemoteServiceRegistration reg ) { } void unregisterFromServiceDiscovery ( final RemoteServiceRegistration reg ) { } static byte [ ] getBundle ( final Bundle bundle ) throws IOException { } static byte [ ] [ ] getBundlesForPackages ( final String [ ] packages ) throws IOException { } private static byte [ ] getBundleConcierge ( final Bundle bundle , final byte [ ] buffer , final ByteArrayOutputStream out ) throws IOException { } static boolean checkPackageImport ( final String pkg ) { } private static byte [ ] generateBundle ( final Bundle bundle , final String prefix , final byte [ ] buffer , final CRC32 crc ) throws Exception { } private static void scan ( final Bundle bundle , final String prefix , final String path , final JarOutputStream out , final byte [ ] buffer , final CRC32 crc ) throws Exception { } public void createEndpoint ( final NetworkChannel channel ) { } public void ungetRemoteService ( final RemoteServiceReference remoteServiceReference ) { } public void asyncRemoteCall ( URI service , String methodSignature , Object [ ] args , AsyncRemoteCallCallback callback ) { } }

Fix:
if ( ( multiplexer == null ) || ( ! ( multiplexer . isConnected ( ) ) ) ) {