aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi
diff options
context:
space:
mode:
authorGravatar Ken Payson <kpayson@google.com>2017-09-01 14:30:29 -0700
committerGravatar Mark D. Roth <roth@google.com>2017-09-01 15:06:30 -0700
commitd27504f09a6ec147ee0ea4d38b6d4714e0449fda (patch)
treec8a03185ff19d3275245e7db05ea39b5f20662f0 /src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi
parent2caf021772ee241da3366e7dfd32aa4ee1134092 (diff)
Changes
Diffstat (limited to 'src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi')
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi
index 36ae151b9d..fa89b8d55a 100644
--- a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi
@@ -14,6 +14,7 @@
cimport cpython
+import threading
import traceback
@@ -128,7 +129,6 @@ cdef int plugin_get_metadata(
grpc_metadata creds_md[GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX],
size_t *num_creds_md, grpc_status_code *status,
const char **error_details) with gil:
-# FIXME: force the python code to run in a separate thread
called_flag = [False]
def python_callback(
Metadata metadata, grpc_status_code status,
@@ -139,12 +139,14 @@ cdef int plugin_get_metadata(
cdef CredentialsMetadataPlugin self = <CredentialsMetadataPlugin>state
cdef AuthMetadataContext cy_context = AuthMetadataContext()
cy_context.context = context
- try:
- self.plugin_callback(cy_context, python_callback)
- except Exception as error:
- if not called_flag[0]:
- cb(user_data, Metadata([]).c_metadata_array.metadata,
- 0, StatusCode.unknown, traceback.format_exc().encode())
+ def async_callback():
+ try:
+ self.plugin_callback(cy_context, python_callback)
+ except Exception as error:
+ if not called_flag[0]:
+ cb(user_data, Metadata([]).c_metadata_array.metadata,
+ 0, StatusCode.unknown, traceback.format_exc().encode())
+ threading.Thread(group=None, target=async_callback).start()
return 0 # Asynchronous return
cdef void plugin_destroy_c_plugin_state(void *state) with gil: