fix(runtime): replace Handle::current().block_on() with std:🧵:spawn in transfer_to_human
Some checks failed
BotServer CI/CD / build (push) Failing after 1m18s
Some checks failed
BotServer CI/CD / build (push) Failing after 1m18s
- Handle::current().block_on() panics when called from within a runtime
- replaced all 5 occurrences with std:🧵:spawn + mpsc::channel
- matches the pattern already used across other keyword files
This commit is contained in:
parent
f2f81415e4
commit
3f94d23e1f
1 changed files with 120 additions and 75 deletions
|
|
@ -498,22 +498,31 @@ pub fn register_transfer_to_human_keyword(
|
||||||
let state = state_clone.clone();
|
let state = state_clone.clone();
|
||||||
let session = user_clone.clone();
|
let session = user_clone.clone();
|
||||||
|
|
||||||
let rt = tokio::runtime::Handle::current();
|
let (tx, rx) = std::sync::mpsc::channel();
|
||||||
let result = rt.block_on(async {
|
std::thread::spawn(move || {
|
||||||
execute_transfer(
|
let rt = tokio::runtime::Builder::new_current_thread()
|
||||||
state,
|
.enable_all()
|
||||||
&session,
|
.build();
|
||||||
TransferToHumanRequest {
|
let result = match rt {
|
||||||
name: None,
|
Ok(rt) => rt.block_on(async {
|
||||||
department: None,
|
execute_transfer(
|
||||||
priority: None,
|
state,
|
||||||
reason: None,
|
&session,
|
||||||
context: None,
|
TransferToHumanRequest {
|
||||||
},
|
name: None,
|
||||||
)
|
department: None,
|
||||||
.await
|
priority: None,
|
||||||
|
reason: None,
|
||||||
|
context: None,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}),
|
||||||
|
Err(e) => Err(anyhow::anyhow!("Failed to create runtime: {}", e)),
|
||||||
|
};
|
||||||
|
let _ = tx.send(result);
|
||||||
});
|
});
|
||||||
|
let result = rx.recv().unwrap_or_else(|e| Err(anyhow::anyhow!("Channel error: {}", e)));
|
||||||
result.to_dynamic()
|
result.to_dynamic()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -524,22 +533,31 @@ pub fn register_transfer_to_human_keyword(
|
||||||
let session = user_clone.clone();
|
let session = user_clone.clone();
|
||||||
let name_str = name.to_string();
|
let name_str = name.to_string();
|
||||||
|
|
||||||
let rt = tokio::runtime::Handle::current();
|
let (tx, rx) = std::sync::mpsc::channel();
|
||||||
let result = rt.block_on(async {
|
std::thread::spawn(move || {
|
||||||
execute_transfer(
|
let rt = tokio::runtime::Builder::new_current_thread()
|
||||||
state,
|
.enable_all()
|
||||||
&session,
|
.build();
|
||||||
TransferToHumanRequest {
|
let result = match rt {
|
||||||
name: Some(name_str),
|
Ok(rt) => rt.block_on(async {
|
||||||
department: None,
|
execute_transfer(
|
||||||
priority: None,
|
state,
|
||||||
reason: None,
|
&session,
|
||||||
context: None,
|
TransferToHumanRequest {
|
||||||
},
|
name: Some(name_str),
|
||||||
)
|
department: None,
|
||||||
.await
|
priority: None,
|
||||||
|
reason: None,
|
||||||
|
context: None,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}),
|
||||||
|
Err(e) => Err(anyhow::anyhow!("Failed to create runtime: {}", e)),
|
||||||
|
};
|
||||||
|
let _ = tx.send(result);
|
||||||
});
|
});
|
||||||
|
let result = rx.recv().unwrap_or_else(|e| Err(anyhow::anyhow!("Channel error: {}", e)));
|
||||||
result.to_dynamic()
|
result.to_dynamic()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -553,22 +571,31 @@ pub fn register_transfer_to_human_keyword(
|
||||||
let dept = department.to_string();
|
let dept = department.to_string();
|
||||||
let prio = priority.to_string();
|
let prio = priority.to_string();
|
||||||
|
|
||||||
let rt = tokio::runtime::Handle::current();
|
let (tx, rx) = std::sync::mpsc::channel();
|
||||||
let result = rt.block_on(async {
|
std::thread::spawn(move || {
|
||||||
execute_transfer(
|
let rt = tokio::runtime::Builder::new_current_thread()
|
||||||
state,
|
.enable_all()
|
||||||
&session,
|
.build();
|
||||||
TransferToHumanRequest {
|
let result = match rt {
|
||||||
name: None,
|
Ok(rt) => rt.block_on(async {
|
||||||
department: Some(dept),
|
execute_transfer(
|
||||||
priority: Some(prio),
|
state,
|
||||||
reason: None,
|
&session,
|
||||||
context: None,
|
TransferToHumanRequest {
|
||||||
},
|
name: None,
|
||||||
)
|
department: Some(dept),
|
||||||
.await
|
priority: Some(prio),
|
||||||
|
reason: None,
|
||||||
|
context: None,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}),
|
||||||
|
Err(e) => Err(anyhow::anyhow!("Failed to create runtime: {}", e)),
|
||||||
|
};
|
||||||
|
let _ = tx.send(result);
|
||||||
});
|
});
|
||||||
|
let result = rx.recv().unwrap_or_else(|e| Err(anyhow::anyhow!("Channel error: {}", e)));
|
||||||
result.to_dynamic()
|
result.to_dynamic()
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
@ -584,22 +611,31 @@ pub fn register_transfer_to_human_keyword(
|
||||||
let prio = priority.to_string();
|
let prio = priority.to_string();
|
||||||
let rsn = reason.to_string();
|
let rsn = reason.to_string();
|
||||||
|
|
||||||
let rt = tokio::runtime::Handle::current();
|
let (tx, rx) = std::sync::mpsc::channel();
|
||||||
let result = rt.block_on(async {
|
std::thread::spawn(move || {
|
||||||
execute_transfer(
|
let rt = tokio::runtime::Builder::new_current_thread()
|
||||||
state,
|
.enable_all()
|
||||||
&session,
|
.build();
|
||||||
TransferToHumanRequest {
|
let result = match rt {
|
||||||
name: None,
|
Ok(rt) => rt.block_on(async {
|
||||||
department: Some(dept),
|
execute_transfer(
|
||||||
priority: Some(prio),
|
state,
|
||||||
reason: Some(rsn),
|
&session,
|
||||||
context: None,
|
TransferToHumanRequest {
|
||||||
},
|
name: None,
|
||||||
)
|
department: Some(dept),
|
||||||
.await
|
priority: Some(prio),
|
||||||
|
reason: Some(rsn),
|
||||||
|
context: None,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}),
|
||||||
|
Err(e) => Err(anyhow::anyhow!("Failed to create runtime: {}", e)),
|
||||||
|
};
|
||||||
|
let _ = tx.send(result);
|
||||||
});
|
});
|
||||||
|
let result = rx.recv().unwrap_or_else(|e| Err(anyhow::anyhow!("Channel error: {}", e)));
|
||||||
result.to_dynamic()
|
result.to_dynamic()
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
@ -626,22 +662,31 @@ pub fn register_transfer_to_human_keyword(
|
||||||
.get("context")
|
.get("context")
|
||||||
.and_then(|v| v.clone().try_cast::<String>());
|
.and_then(|v| v.clone().try_cast::<String>());
|
||||||
|
|
||||||
let rt = tokio::runtime::Handle::current();
|
let (tx, rx) = std::sync::mpsc::channel();
|
||||||
let result = rt.block_on(async {
|
std::thread::spawn(move || {
|
||||||
execute_transfer(
|
let rt = tokio::runtime::Builder::new_current_thread()
|
||||||
state,
|
.enable_all()
|
||||||
&session,
|
.build();
|
||||||
TransferToHumanRequest {
|
let result = match rt {
|
||||||
name,
|
Ok(rt) => rt.block_on(async {
|
||||||
department,
|
execute_transfer(
|
||||||
priority,
|
state,
|
||||||
reason,
|
&session,
|
||||||
context,
|
TransferToHumanRequest {
|
||||||
},
|
name,
|
||||||
)
|
department,
|
||||||
.await
|
priority,
|
||||||
|
reason,
|
||||||
|
context,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}),
|
||||||
|
Err(e) => Err(anyhow::anyhow!("Failed to create runtime: {}", e)),
|
||||||
|
};
|
||||||
|
let _ = tx.send(result);
|
||||||
});
|
});
|
||||||
|
let result = rx.recv().unwrap_or_else(|e| Err(anyhow::anyhow!("Channel error: {}", e)));
|
||||||
result.to_dynamic()
|
result.to_dynamic()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue