public void broadcastEvent(AbstractEvent event) throws IOException, InterruptedException { for (int targetChannel = 0; targetChannel < numChannels; targetChannel++) { RecordSerializer<T> serializer = serializers[targetChannel]; synchronized (serializer) { if (serializer.hasData()) { Buffer buffer = serializer.getCurrentBuffer(); if (buffer == null) { throw new IllegalStateException("Serializer has data but no buffer."); } writeBuffer(buffer, targetChannel, serializer); writer.writeEvent(event, targetChannel); buffer = writer.getBufferProvider().requestBufferBlocking(); serializer.setNextBuffer(buffer); } else { writer.writeEvent(event, targetChannel); } } } }