private boolean doWork(boolean blocking) throws InterruptedException {
        Processing processing;
        if (blocking) {
            processing = queue.take();
        } else {
            processing = queue.poll();
        }

        if (processing == null) {
            //did no work, returning nothing to queue
            return false;
        }
        if (!isInService()) {
            //did no work, returning processing (because it's not empty)
            queue.add(processing);  //always successful, since queue is unbounded
            return false;
        }

        boolean remove = workOn(processing);  //NOTE: Exceptions are handled in here, but not Errors
        if (!remove) {
            queue.add(processing);  //always successful, since queue is unbounded
        }
        return true;
        //NOTE: We *could* have called returnProcessing() in a finally block here, but we don't
        //want that, since the only thing being thrown out here is Errors, and then the Processing
        //can just disappear instead
    }
<p>Do some work in this service. This will perform some processing and return
in a "short" while, as long as individual processors also returns.</p>

<p>This method is thread safe - multiple threads may call doWork at any time.
Note that processors
should be non-blocking, so multiple threads should be used primarily to
utilize multiple processors.</p>

@return true if some work was performed, false if no work could be performed
        at this time, because there are no outstanding processings, or because
        this is out of service. Note that since processings may arrive or be put
        back by another thread at any time, this return value does not mean
        that no work will be available if doWork as called again immediately.
docproc/src/main/java/com/yahoo/docproc/impl/DocprocService.java