/** * Put listener if it is absent. * * @param topic Topic. * @param lsnr Listener. * @return Old listener (if any). */ @Nullable private GridMessageListener listenerPutIfAbsent0(Object topic, GridMessageListener lsnr) { if (topic instanceof GridTopic) { synchronized (sysLsnrsMux) { int idx = systemListenerIndex(topic); GridMessageListener old = sysLsnrs[idx]; if (old == null) changeSystemListener(idx, lsnr); return old; } } else return lsnrMap.putIfAbsent(topic, lsnr); }
/** * Change system listener. * * @param topic Topic. * @param exp Expected value. * @param newVal New value. * @return Result. */ private boolean systemListenerChange(Object topic, GridMessageListener exp, GridMessageListener newVal) { assert Thread.holdsLock(sysLsnrsMux); assert topic instanceof GridTopic; int idx = systemListenerIndex(topic); GridMessageListener old = sysLsnrs[idx]; if (old != null && old.equals(exp)) { changeSystemListener(idx, newVal); return true; } return false; }
/** * Remove listener. * * @param topic Topic. * @return Removed listener (if any). */ @Nullable private GridMessageListener listenerRemove0(Object topic) { if (topic instanceof GridTopic) { synchronized (sysLsnrsMux) { int idx = systemListenerIndex(topic); GridMessageListener old = sysLsnrs[idx]; if (old != null) changeSystemListener(idx, null); return old; } } else return lsnrMap.remove(topic); }
/** * Remove listener. * * @param topic Topic. * @return Removed listener (if any). */ @Nullable private GridMessageListener listenerRemove0(Object topic) { if (topic instanceof GridTopic) { synchronized (sysLsnrsMux) { int idx = systemListenerIndex(topic); GridMessageListener old = sysLsnrs[idx]; if (old != null) changeSystemListener(idx, null); return old; } } else return lsnrMap.remove(topic); }
/** * Change system listener. * * @param topic Topic. * @param exp Expected value. * @param newVal New value. * @return Result. */ private boolean systemListenerChange(Object topic, GridMessageListener exp, GridMessageListener newVal) { assert Thread.holdsLock(sysLsnrsMux); assert topic instanceof GridTopic; int idx = systemListenerIndex(topic); GridMessageListener old = sysLsnrs[idx]; if (old != null && old.equals(exp)) { changeSystemListener(idx, newVal); return true; } return false; }
/** * Put listener if it is absent. * * @param topic Topic. * @param lsnr Listener. * @return Old listener (if any). */ @Nullable private GridMessageListener listenerPutIfAbsent0(Object topic, GridMessageListener lsnr) { if (topic instanceof GridTopic) { synchronized (sysLsnrsMux) { int idx = systemListenerIndex(topic); GridMessageListener old = sysLsnrs[idx]; if (old == null) changeSystemListener(idx, lsnr); return old; } } else return lsnrMap.putIfAbsent(topic, lsnr); }