|
|
|
@ -203,10 +203,10 @@ async def _handle_rpc(list generic_handlers, RPCState rpc_state, object loop): |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _FINISH_FUTURE(future): |
|
|
|
|
future.set_result(None) |
|
|
|
|
class _RequestCallError(Exception): pass |
|
|
|
|
|
|
|
|
|
cdef CallbackFailureHandler IGNORE_FAILURE = CallbackFailureHandler(callback=_FINISH_FUTURE) |
|
|
|
|
cdef CallbackFailureHandler REQUEST_CALL_FAILURE_HANDLER = CallbackFailureHandler( |
|
|
|
|
'grpc_server_request_call', 'server shutdown', _RequestCallError) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def _server_call_request_call(Server server, |
|
|
|
@ -217,7 +217,7 @@ async def _server_call_request_call(Server server, |
|
|
|
|
cdef object future = loop.create_future() |
|
|
|
|
cdef CallbackWrapper wrapper = CallbackWrapper( |
|
|
|
|
future, |
|
|
|
|
IGNORE_FAILURE) |
|
|
|
|
REQUEST_CALL_FAILURE_HANDLER) |
|
|
|
|
# NOTE(lidiz) Without Py_INCREF, the wrapper object will be destructed |
|
|
|
|
# when calling "await". This is an over-optimization by Cython. |
|
|
|
|
cpython.Py_INCREF(wrapper) |
|
|
|
@ -365,8 +365,11 @@ cdef class AioServer: |
|
|
|
|
self._server.is_shutting_down = True |
|
|
|
|
self._status = AIO_SERVER_STATUS_STOPPING |
|
|
|
|
|
|
|
|
|
# Ensures the serving task (coroutine) exits normally |
|
|
|
|
await self._serving_task |
|
|
|
|
# Ensures the serving task (coroutine) exits. |
|
|
|
|
try: |
|
|
|
|
await self._serving_task |
|
|
|
|
except _RequestCallError: |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
if grace is None: |
|
|
|
|
# Directly cancels all calls |
|
|
|
|