1414from typing import TextIO
1515
1616from ddtrace import config
17+ from ddtrace .internal import forksafe
1718from ddtrace .internal .dist_computing .utils import in_ray_job
1819from ddtrace .internal .hostname import get_hostname
1920import ddtrace .internal .native as native
@@ -786,6 +787,7 @@ def __init__(
786787 self ._compute_stats_enabled = compute_stats_enabled
787788 self ._response_cb = response_callback
788789 self ._stats_opt_out = stats_opt_out
790+ forksafe .register_before_fork (self .before_fork )
789791 self ._exporter = self ._create_exporter ()
790792
791793 def _create_exporter (self ) -> native .TraceExporter :
@@ -933,7 +935,6 @@ def _set_keep_rate(self, trace):
933935 def _send_payload (self , payload : bytes , count : int , client : WriterClientBase ):
934936 try :
935937 response_body = self ._exporter .send (payload , count )
936- self ._exporter .stop_worker ()
937938 except native .RequestError as e :
938939 try :
939940 # Request errors are formatted as "Error code: {code}, Response: {response}"
@@ -1065,6 +1066,7 @@ def _stop_service(
10651066 ) -> None :
10661067 # FIXME: don't join() on stop(), let the caller handle this
10671068 super (NativeWriter , self )._stop_service ()
1069+ self .before_fork ()
10681070 self .join (timeout = timeout )
10691071
10701072 def before_fork (self ) -> None :
@@ -1074,6 +1076,7 @@ def on_shutdown(self):
10741076 try :
10751077 self .periodic ()
10761078 finally :
1079+ forksafe .unregister_before_fork (self .before_fork )
10771080 self ._exporter .shutdown (3_000_000_000 ) # 3 seconds timeout
10781081
10791082
0 commit comments