@@ -243,6 +243,7 @@ def response_hook(span: Span, status: str, response_headers: List):
243
243
from time import time_ns
244
244
from timeit import default_timer
245
245
from typing import Collection
246
+ import weakref
246
247
247
248
import flask
248
249
@@ -265,18 +266,17 @@ def response_hook(span: Span, status: str, response_headers: List):
265
266
_ENVIRON_STARTTIME_KEY = "opentelemetry-flask.starttime_key"
266
267
_ENVIRON_SPAN_KEY = "opentelemetry-flask.span_key"
267
268
_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 "
269
270
_ENVIRON_TOKEN = "opentelemetry-flask.token"
270
271
271
272
_excluded_urls_from_env = get_excluded_urls ("FLASK" )
272
273
273
274
if 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 ())
277
277
else :
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 )
280
280
281
281
def get_default_span_name ():
282
282
try :
@@ -406,7 +406,7 @@ def _before_request():
406
406
activation = trace .use_span (span , end_on_exit = True )
407
407
activation .__enter__ () # pylint: disable=E1101
408
408
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 ()
410
410
flask_request_environ [_ENVIRON_SPAN_KEY ] = span
411
411
flask_request_environ [_ENVIRON_TOKEN ] = token
412
412
@@ -447,9 +447,9 @@ def _teardown_request(exc):
447
447
448
448
activation = flask .request .environ .get (_ENVIRON_ACTIVATION_KEY )
449
449
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 :
453
453
# This request didn't start a span, maybe because it was created in
454
454
# a way that doesn't run `before_request`, like when it is created
455
455
# with `app.test_request_context`.
0 commit comments