diff --git a/src/main/java/org/redisson/RedissonSet.java b/src/main/java/org/redisson/RedissonSet.java index b38a857b1..7b7994952 100644 --- a/src/main/java/org/redisson/RedissonSet.java +++ b/src/main/java/org/redisson/RedissonSet.java @@ -91,31 +91,15 @@ public class RedissonSet implements Set { @Override public boolean retainAll(Collection c) { - RedisConnection conn = redisson.connect(); - try { - while (true) { - int changed = 0; - conn.watch(name); - Iterator iterator = (Iterator) conn.smembers(name).iterator(); - conn.multi(); - while (iterator.hasNext()) { - V object = iterator.next(); - if (!c.contains(object)) { - iterator.remove(); - connection.srem(name, object); - changed++; - } - } - if (changed == 0) { - conn.discard(); - return false; - } else if (conn.exec().size() == changed) { - return true; - } + boolean changed = false; + for (Iterator iterator = iterator(); iterator.hasNext();) { + V object = iterator.next(); + if (!c.contains(object)) { + iterator.remove(); + changed = true; } - } finally { - conn.close(); } + return changed; } @Override