I think that I've tracked down an NPE in the crosby_integration branch
of the splitter.  The SplitProcessor is using a BlockingQueue to queue
up elements for writing.  The poll() method can potentially return a
null if the queue is empty.  My question is, should the poll() method
call be switched to a take() method call - the take() method will
block if the queue is empty, or should I guard the usage of elements
for null like in the patch below?

Index: src/uk/me/parabola/splitter/SplitProcessor.java
===================================================================
--- src/uk/me/parabola/splitter/SplitProcessor.java     (revision 161)
+++ src/uk/me/parabola/splitter/SplitProcessor.java     (working copy)
@@ -320,13 +320,14 @@
                                } else {
                                        synchronized (workPackage) {
                                        while 
(!workPackage.inputQueue.isEmpty()) {
-                                               ArrayList<Element> elements 
=null;
+                                               ArrayList<Element> elements = 
null;
                                                try {
                                                        elements = 
workPackage.inputQueue.poll();
-                                                       for (Element element : 
elements ) {
-                                                               
processElement(element, workPackage.writer);
+                                                       if (elements != null) {
+                                                               for (Element 
element : elements ) {
+                                                                       
processElement(element, workPackage.writer);
+                                                               }
                                                        }
-                                                       
                                                } catch (IOException e) {
                                                        throw new 
RuntimeException("Thread " +
Thread.currentThread().getName() + " failed to write element ", e);
                                                }

-- 
Jeff Ollie
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev

Reply via email to