synchronized void setCallAndStart(BigtableAsyncRpc<RequestT, ResponseT> rpc, CallOptions callOptions, RequestT request, ClientCall.Listener<ResponseT> listener, Metadata metadata) { // There's a subtle race condition in RetryingStreamOperation which requires a separate // newCall/start split. The call variable needs to be set before onMessage() happens; that // usually will occur, but some unit tests broke with a merged newCall and start. this.call = rpc.newCall(callOptions); rpc.start(request, listener, metadata, call); }