You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
error!("Failed to set EventRepeater {}'s Weak self-reference because it was already set. This should never happen. Shutting down ungracefully to prevent further undefined behavior.", arc.event.name);
84
+
unreachable!(
85
+
"Unable to set EventRepeater {}'s Weak self-reference because it was already set.",
let self_arc = matchself.self_arc.lock().await.as_ref(){
85
-
Some(arc) => Arc::clone(arc),
100
+
let lock = self.weak.lock().await;
101
+
let weak = match lock.get(){
102
+
Some(weak) => weak,
86
103
None => {
87
104
returnErr(AttachError::NotInitialized{
88
105
event_name: event.name.clone(),
@@ -91,6 +108,15 @@ where
91
108
}
92
109
};
93
110
111
+
// This can't fail because the Arc is guaranteed to be valid as long as &self is valid.
112
+
let arc = match weak.upgrade(){
113
+
Some(arc) => arc,
114
+
None => {
115
+
error!("EventRepeater {}'s Weak self-reference could not be upgraded to Arc while attaching event {}. This should never happen. Shutting down ungracefully to prevent further undefined behavior.",self.event.name, event.name);
116
+
unreachable!("EventRepeater {}'s Weak self-reference could not be upgraded to Arc while attaching event {}.",self.event.name, event.name);
let result = self_arc_clone.arc.lock().await.set(Arc::clone(&self_arc_clone));
63
+
let arc = Arc::new(service_manager);
64
+
let weak = Arc::downgrade(&arc);
67
65
66
+
let result = arc.weak.lock().await.set(weak);
68
67
ifletErr(err) = result {
69
68
match err {
70
69
SetLockError::AlreadySet => {
71
-
unreachable!("Unable to set ServiceManager's self-arc in ServiceManagerBuilder because it was already set. This should never happen. How did you...?");
70
+
error!("Unable to set ServiceManager's Weak self-reference in ServiceManagerBuilder because it was already set. This should never happen. Shutting down ungracefully to prevent further undefined behavior.");
71
+
unreachable!("Unable to set ServiceManager's Weak self-reference in ServiceManagerBuilder because it was already set.");
let service_manager = Arc::clone(self.arc.lock().await.unwrap());
329
+
let lock = self.weak.lock().await;
330
+
let weak = match lock.get(){
331
+
Some(weak) => weak,
332
+
None => {
333
+
error!("ServiceManager's Weak self-reference was None while initializing service {}. This should never happen. Did you not use a ServiceManagerBuilder? Shutting down ungracefully to prevent further undefined behavior.", service.info().name);
334
+
unreachable!("ServiceManager's Weak self-reference was None while initializing service {}.", service.info().name);
335
+
}
336
+
};
337
+
338
+
// This can't fail because the Arc is guaranteed to be valid as long as &self is valid.
339
+
let arc = match weak.upgrade(){
340
+
Some(arc) => arc,
341
+
None => {
342
+
error!("ServiceManager's Weak self-reference could not be upgraded to Arc while initializing service {}. This should never happen. Shutting down ungracefully to prevent further undefined behavior.", service.info().name);
343
+
unreachable!("ServiceManager's Weak self-reference could not be upgraded to Arc while initializing service {}.", service.info().name);
344
+
}
345
+
};
346
+
330
347
331
348
//TODO: Add to config instead of hardcoding duration
332
-
let start = service.start(service_manager);
349
+
let start = service.start(arc);
333
350
let timeout_result = timeout(Duration::from_secs(10), start).await;
0 commit comments