@@ -243,6 +243,7 @@ def response_hook(span: Span, status: str, response_headers: List):
243243from time import time_ns
244244from timeit import default_timer
245245from typing import Collection
246+ import weakref
246247
247248import flask
248249
@@ -265,18 +266,17 @@ def response_hook(span: Span, status: str, response_headers: List):
265266_ENVIRON_STARTTIME_KEY = "opentelemetry-flask.starttime_key"
266267_ENVIRON_SPAN_KEY = "opentelemetry-flask.span_key"
267268_ENVIRON_ACTIVATION_KEY = "opentelemetry-flask.activation_key"
268- _ENVIRON_REQCTX_ID_KEY = "opentelemetry-flask.reqctx_id_key "
269+ _ENVIRON_REQCTX_REF_KEY = "opentelemetry-flask.reqctx_ref_key "
269270_ENVIRON_TOKEN = "opentelemetry-flask.token"
270271
271272_excluded_urls_from_env = get_excluded_urls ("FLASK" )
272273
273274if package_version .parse (flask .__version__ ) >= package_version .parse ("2.2.0" ):
274- def _request_ctx_id () -> int :
275- # return id(flask.globals.request_ctx)
276- return id (flask .globals .request_ctx ._get_current_object ())
275+ def _request_ctx_ref () -> weakref .ReferenceType :
276+ return weakref .ref (flask .globals .request_ctx ._get_current_object ())
277277else :
278- def _request_ctx_id () -> int :
279- return id (flask ._request_ctx_stack .top )
278+ def _request_ctx_ref () -> int :
279+ return weakref . ref (flask ._request_ctx_stack .top )
280280
281281def get_default_span_name ():
282282 try :
@@ -406,7 +406,7 @@ def _before_request():
406406 activation = trace .use_span (span , end_on_exit = True )
407407 activation .__enter__ () # pylint: disable=E1101
408408 flask_request_environ [_ENVIRON_ACTIVATION_KEY ] = activation
409- flask_request_environ [_ENVIRON_REQCTX_ID_KEY ] = _request_ctx_id ()
409+ flask_request_environ [_ENVIRON_REQCTX_REF_KEY ] = _request_ctx_ref ()
410410 flask_request_environ [_ENVIRON_SPAN_KEY ] = span
411411 flask_request_environ [_ENVIRON_TOKEN ] = token
412412
@@ -447,9 +447,9 @@ def _teardown_request(exc):
447447
448448 activation = flask .request .environ .get (_ENVIRON_ACTIVATION_KEY )
449449
450- original_reqctx_id = flask .request .environ .get (_ENVIRON_REQCTX_ID_KEY )
451- current_reqctx_id = _request_ctx_id ()
452- if not activation or original_reqctx_id != current_reqctx_id :
450+ original_reqctx_ref = flask .request .environ .get (_ENVIRON_REQCTX_REF_KEY )
451+ current_reqctx_ref = _request_ctx_ref ()
452+ if not activation or original_reqctx_ref != current_reqctx_ref :
453453 # This request didn't start a span, maybe because it was created in
454454 # a way that doesn't run `before_request`, like when it is created
455455 # with `app.test_request_context`.
0 commit comments