[concurrency-interest] ManagedBlocker.block() documentation

Roman Leventov leventov.ru at gmail.com
Wed Oct 30 03:23:06 EDT 2019


Currently, ManagedBlocker's documentation doesn't clarify whether the
execution framework could call block() more than once or not. The
specification for the return value of block() method:

> true if no additional blocking is necessary (i.e., if isReleasable would
return true)

Implies that isReleasable result should change if block() returns true.

It means that to code one-off blocking ops with ManagedBlocker, strictly
against the spec, one must make block() idempotent:

class MyBlocker implements ManagedBlocker {
  boolean done = false;
  boolean block() {
    if (done) return true;
    doMyOneOffBlockingOp();
    done = true;
    return true;
  }
  boolean isReleasable() { return done; }
}

Which is 1) boilerplate 2) non-trivial conclusion, implicit in the doc (so
few people would probably do this; e. g. there is an SO answer from a very
reputable folk that ditch this complexity and call it an "official
solution": https://stackoverflow.com/a/46073118/648955)

So, perhaps, it would make sense to extend the documentation
of ManagedBlocker with reservations about one-off blocking operations, e.
g. like this:

@return true if no additional blocking is necessary (i.e., if isReleasable
would return true, or if block() is a one-off operation)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cs.oswego.edu/pipermail/concurrency-interest/attachments/20191030/702ba732/attachment.html>


More information about the Concurrency-interest mailing list