mirror of https://github.com/grpc/grpc-node.git
Merge pull request #2123 from bartslinger/fix_disconnect_listeners
bugfix: handle disconnectListeners in reverse to allow listener removal in loop
This commit is contained in:
commit
6c17d19834
|
@ -108,7 +108,7 @@ export class Subchannel {
|
||||||
* socket disconnects. Used for ending active calls with an UNAVAILABLE
|
* socket disconnects. Used for ending active calls with an UNAVAILABLE
|
||||||
* status.
|
* status.
|
||||||
*/
|
*/
|
||||||
private disconnectListeners: Array<() => void> = [];
|
private disconnectListeners: Set<() => void> = new Set();
|
||||||
|
|
||||||
private backoffTimeout: BackoffTimeout;
|
private backoffTimeout: BackoffTimeout;
|
||||||
|
|
||||||
|
@ -646,7 +646,7 @@ export class Subchannel {
|
||||||
this.transitionToState(
|
this.transitionToState(
|
||||||
[ConnectivityState.READY],
|
[ConnectivityState.READY],
|
||||||
ConnectivityState.TRANSIENT_FAILURE);
|
ConnectivityState.TRANSIENT_FAILURE);
|
||||||
for (const listener of this.disconnectListeners) {
|
for (const listener of this.disconnectListeners.values()) {
|
||||||
listener();
|
listener();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -971,14 +971,11 @@ export class Subchannel {
|
||||||
}
|
}
|
||||||
|
|
||||||
addDisconnectListener(listener: () => void) {
|
addDisconnectListener(listener: () => void) {
|
||||||
this.disconnectListeners.push(listener);
|
this.disconnectListeners.add(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
removeDisconnectListener(listener: () => void) {
|
removeDisconnectListener(listener: () => void) {
|
||||||
const listenerIndex = this.disconnectListeners.indexOf(listener);
|
this.disconnectListeners.delete(listener);
|
||||||
if (listenerIndex > -1) {
|
|
||||||
this.disconnectListeners.splice(listenerIndex, 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue