private boolean writeRequest(
     boolean internal,
     String oid,
     TypeDescription type,
     String function,
     ThreadId tid,
     Object[] arguments)
     throws IOException {
   IMethodDescription desc = type.getMethodDescription(function);
   synchronized (output) {
     if (desc.getIndex() == MethodDescription.ID_RELEASE
         && releaseQueue.size() < MAX_RELEASE_QUEUE_SIZE) {
       releaseQueue.add(new QueuedRelease(internal, oid, type, desc, tid));
       return false;
     } else {
       writeQueuedReleases();
       return writeRequest(internal, oid, type, desc, tid, arguments, true);
     }
   }
 }