@@ -119,6 +119,9 @@ fn parse_retry_after(s: &str) -> Option<SystemTime> {
119119 }
120120}
121121
122+ /// # Panics
123+ ///
124+ /// Panics if the OS fails to create thread.
122125fn spawn_http_sender (
123126 client : Client ,
124127 receiver : Receiver < Option < Event < ' static > > > ,
@@ -130,58 +133,61 @@ fn spawn_http_sender(
130133) -> JoinHandle < ( ) > {
131134 let mut disabled = SystemTime :: now ( ) ;
132135
133- thread:: spawn ( move || {
134- let url = dsn. store_api_url ( ) . to_string ( ) ;
136+ thread:: Builder :: new ( )
137+ . name ( "sentry-transport" . to_string ( ) )
138+ . spawn ( move || {
139+ let url = dsn. store_api_url ( ) . to_string ( ) ;
135140
136- while let Some ( event) = receiver. recv ( ) . unwrap_or ( None ) {
137- // on drop we want to not continue processing the queue.
138- if shutdown_immediately. load ( Ordering :: SeqCst ) {
139- let mut size = queue_size. lock ( ) . unwrap ( ) ;
140- * size = 0 ;
141- signal. notify_all ( ) ;
142- break ;
143- }
141+ while let Some ( event) = receiver. recv ( ) . unwrap_or ( None ) {
142+ // on drop we want to not continue processing the queue.
143+ if shutdown_immediately. load ( Ordering :: SeqCst ) {
144+ let mut size = queue_size. lock ( ) . unwrap ( ) ;
145+ * size = 0 ;
146+ signal. notify_all ( ) ;
147+ break ;
148+ }
144149
145- // while we are disabled due to rate limits, skip
146- let now = SystemTime :: now ( ) ;
147- if let Ok ( time_left) = disabled. duration_since ( now) {
148- sentry_debug ! (
149- "Skipping event send because we're disabled due to rate limits for {}s" ,
150- time_left. as_secs( )
151- ) ;
152- continue ;
153- }
150+ // while we are disabled due to rate limits, skip
151+ let now = SystemTime :: now ( ) ;
152+ if let Ok ( time_left) = disabled. duration_since ( now) {
153+ sentry_debug ! (
154+ "Skipping event send because we're disabled due to rate limits for {}s" ,
155+ time_left. as_secs( )
156+ ) ;
157+ continue ;
158+ }
154159
155- match client
156- . post ( url. as_str ( ) )
157- . json ( & event)
158- . header ( "X-Sentry-Auth" , dsn. to_auth ( Some ( & user_agent) ) . to_string ( ) )
159- . send ( )
160- {
161- Ok ( resp) => {
162- if resp. status ( ) == 429 {
163- if let Some ( retry_after) = resp
164- . headers ( )
165- . get ( RETRY_AFTER )
166- . and_then ( |x| x. to_str ( ) . ok ( ) )
167- . and_then ( parse_retry_after)
168- {
169- disabled = retry_after;
160+ match client
161+ . post ( url. as_str ( ) )
162+ . json ( & event)
163+ . header ( "X-Sentry-Auth" , dsn. to_auth ( Some ( & user_agent) ) . to_string ( ) )
164+ . send ( )
165+ {
166+ Ok ( resp) => {
167+ if resp. status ( ) == 429 {
168+ if let Some ( retry_after) = resp
169+ . headers ( )
170+ . get ( RETRY_AFTER )
171+ . and_then ( |x| x. to_str ( ) . ok ( ) )
172+ . and_then ( parse_retry_after)
173+ {
174+ disabled = retry_after;
175+ }
170176 }
171177 }
178+ Err ( err) => {
179+ sentry_debug ! ( "Failed to send event: {}" , err) ;
180+ }
172181 }
173- Err ( err) => {
174- sentry_debug ! ( "Failed to send event: {}" , err) ;
175- }
176- }
177182
178- let mut size = queue_size. lock ( ) . unwrap ( ) ;
179- * size -= 1 ;
180- if * size == 0 {
181- signal. notify_all ( ) ;
183+ let mut size = queue_size. lock ( ) . unwrap ( ) ;
184+ * size -= 1 ;
185+ if * size == 0 {
186+ signal. notify_all ( ) ;
187+ }
182188 }
183- }
184- } )
189+ } )
190+ . unwrap ( ) // TODO: Panic, change API to return Result?
185191}
186192
187193impl HttpTransport {
0 commit comments