protected void preWait() { waiting = true; DM mgr = getDistributionManager(); statStart = mgr.getStats().startReplyWait(); synchronized (this.members) { Set activeMembers = addListenerAndGetMembers(); processActiveMembers(activeMembers); } }
/** * Registers this processor as a membership listener and * returns a set of the current members. * @return a Set of the current members * @since 5.7 */ @Override protected Set addListenerAndGetMembers() { DistributionAdvisor da = UpdateAttributesProcessor.this.advisee.getDistributionAdvisor(); if (da.useAdminMembersForDefault()) { return getDistributionManager() .addAllMembershipListenerAndGetAllIds(this); } else { return super.addListenerAndGetMembers(); } } /**
/** * Registers this processor as a membership listener and * returns a set of the current members. * @return a Set of the current members * @since 5.7 */ @Override protected Set addListenerAndGetMembers() { DistributionAdvisor da = UpdateAttributesProcessor.this.advisee.getDistributionAdvisor(); if (da.useAdminMembersForDefault()) { return getDistributionManager() .addAllMembershipListenerAndGetAllIds(this); } else { return super.addListenerAndGetMembers(); } } /**
protected void preWait() { startedWaiting = true; DM mgr = getDistributionManager(); statStart = mgr.getStats().startReplyWait(); // take lock on "this" first because memberDeparted will take a lock on // "this" leading to lock inversion against other paths that take in reverse // order e.g. toString() calls from any of the "this" synced methods // [sumedh] do we need two locks in this class, or only this should do? synchronized (this) { final InternalDistributedMember[] mbrs = this.members; synchronized (mbrs) { // no need to register with MembershipListener for the case of self // execution only (#47198) if (mbrs.length > 0 && !(mbrs.length == 1 && mbrs[0] != null && mbrs[0] .equals(this.system.getDistributedMember()))) { Set<?> activeMembers = addListenerAndGetMembers(); this.listenerAdded = true; processActiveMembers(activeMembers); } } } }