mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Fix CID 1128968 Iterator modified during loop
This commit is contained in:
parent
47d6a64b31
commit
669aebf1bc
@ -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);
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user