You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by hu...@apache.org on 2014/07/25 11:59:58 UTC
git commit: updated refs/heads/master to 669aebf
Repository: cloudstack
Updated Branches:
refs/heads/master 47d6a64b3 -> 669aebf1b
Fix CID 1128968 Iterator modified during loop
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/669aebf1
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/669aebf1
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/669aebf1
Branch: refs/heads/master
Commit: 669aebf1bc7966a5079aa143f1621958609b7b7d
Parents: 47d6a64
Author: Hugo Trippaers <ht...@schubergphilis.com>
Authored: Fri Jul 25 11:55:04 2014 +0200
Committer: Hugo Trippaers <ht...@schubergphilis.com>
Committed: Fri Jul 25 11:58:16 2014 +0200
----------------------------------------------------------------------
.../src/main/java/streamer/BaseElement.java | 7 ++-
.../src/test/java/streamer/BaseElementTest.java | 50 ++++++++++++++++++++
2 files changed, 56 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/669aebf1/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/BaseElement.java
----------------------------------------------------------------------
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/BaseElement.java b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/BaseElement.java
index 1ca68ce..a93b037 100755
--- a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/BaseElement.java
+++ b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/BaseElement.java
@@ -149,7 +149,12 @@ public class BaseElement implements Element {
*/
@Override
public void poll(boolean block) {
- for (DataSource source : inputPads.values()) {
+ // inputPads can be changed in handleData (see switchOff in OneTimeSwitch)
+ // as this results in an undefined response from the iterator on inputPads
+ // use a copy of the map to iterate over.
+ Map<String, DataSource> pads = new HashMap<String, DataSource>();
+ pads.putAll(inputPads);
+ for (DataSource source : pads.values()) {
Link link = (Link)source;
ByteBuffer buf = link.pull(block);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/669aebf1/services/console-proxy-rdp/rdpconsole/src/test/java/streamer/BaseElementTest.java
----------------------------------------------------------------------
diff --git a/services/console-proxy-rdp/rdpconsole/src/test/java/streamer/BaseElementTest.java b/services/console-proxy-rdp/rdpconsole/src/test/java/streamer/BaseElementTest.java
new file mode 100644
index 0000000..1521d2f
--- /dev/null
+++ b/services/console-proxy-rdp/rdpconsole/src/test/java/streamer/BaseElementTest.java
@@ -0,0 +1,50 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package streamer;
+
+import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.junit.Test;
+
+public class BaseElementTest {
+
+ @Test
+ public void testPoll() {
+ BaseElement element = new BaseElement("test") {
+
+ @Override
+ public void handleData(ByteBuffer buf, Link link) {
+ inputPads.remove("testpad1");
+ inputPads.remove("testpad2");
+ }
+
+ };
+ Link testLink1 = mock(Link.class);
+ when(testLink1.pull(anyBoolean())).thenReturn(new ByteBuffer("hello".getBytes()));
+ Link testLink2 = mock(Link.class);
+ when(testLink2.pull(anyBoolean())).thenReturn(new ByteBuffer("hello".getBytes()));
+
+ element.setLink("testpad1", testLink1, streamer.Direction.IN);
+ element.setLink("testpad2", testLink2, streamer.Direction.IN);
+ element.poll(false);
+ }
+
+}