diff options
author | Sven Gothel <[email protected]> | 2013-06-25 10:40:17 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2013-06-25 10:40:17 +0200 |
commit | 80902692c3e9615cf0b9ea042ce5fdd38b98aa49 (patch) | |
tree | 59b4735388ff5497988b4b64ea11c34cb37f956a | |
parent | d4aef175f1dadae9d12c9930a873b5f3862ac953 (diff) |
CLContext.release: Avoid 'concurrency map modify exception'
-rw-r--r-- | src/com/jogamp/opencl/CLContext.java | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/com/jogamp/opencl/CLContext.java b/src/com/jogamp/opencl/CLContext.java index e3b83ae7..c3bd0e3f 100644 --- a/src/com/jogamp/opencl/CLContext.java +++ b/src/com/jogamp/opencl/CLContext.java @@ -52,6 +52,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -506,11 +507,14 @@ public class CLContext extends CLObjectResource { release(memoryObjects); release(samplers); - for (List<CLCommandQueue> queues : queuesMap.values()) { - release(queues); + synchronized(queuesMap) { + final Collection<List<CLCommandQueue>> queuesList = queuesMap.values(); + for( Iterator<List<CLCommandQueue>> queuesI = queuesList.iterator(); queuesI.hasNext(); ) { + release(queuesI.next()); + } } - }finally{ + } finally { int ret = platform.getContextBinding().clReleaseContext(ID); checkForError(ret, "error releasing context"); } |