@Override
	public RepositoryChangeEvent[] getEvents() throws IOException {
		synchronized (eventQueue) {
			clientActive = true;
			if (eventQueue.isEmpty()) {
				try {
					eventQueue.wait();
				}
				catch (InterruptedException e) {
					throw new IOException("Event wait cancelled");
				}
			}
			if (eventQueue.isEmpty()) {
				throw new IOException("Handle disposed by server");
			}
			RepositoryChangeEvent[] events = new RepositoryChangeEvent[eventQueue.size()];
			eventQueue.toArray(events);
			eventQueue.clear();
			return events;
		}
	}
Verify that the client is active and continuing to read events
Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/RepositoryHandleImpl.java