diff --git a/reactor-core/src/main/java/reactor/core/publisher/FluxGroupBy.java b/reactor-core/src/main/java/reactor/core/publisher/FluxGroupBy.java
index <HASH>..<HASH> 100644
--- a/reactor-core/src/main/java/reactor/core/publisher/FluxGroupBy.java
+++ b/reactor-core/src/main/java/reactor/core/publisher/FluxGroupBy.java
@@ -226,7 +226,6 @@ final class FluxGroupBy<T, K, V> extends FluxOperator<T, GroupedFlux<K, V>>
 				g.onComplete();
 			}
 			groupMap.clear();
-			GROUP_COUNT.decrementAndGet(this);
 			done = true;
 			drain();
 		}
@@ -412,7 +411,7 @@ final class FluxGroupBy<T, K, V> extends FluxOperator<T, GroupedFlux<K, V>>
 			if (d) {
 				Throwable e = error;
 				if (e != null && e != Exceptions.TERMINATED) {
-					queue.clear();
+					q.clear();
 					signalAsyncError();
 					return true;
 				}
cleanup: use passed queue in FluxGroupBy.checkTerminated (port #<I>)

Internal cleanup, the queue is captured locally as `q` and passed as a
parameter. Said parameter should always be used in the utility method,
rather than a direct access to the field.

This is a backport of #<I> (commit e<I>cf5), as tracked in #<I>