mirror of
https://github.com/ZeroTier/ZeroTierOne
synced 2025-08-19 13:01:39 -07:00
fix calling into async functions from non-async via the FFI
This commit is contained in:
parent
e4147f7b80
commit
4fab227c23
3 changed files with 18 additions and 7 deletions
1
rustybits/Cargo.lock
generated
1
rustybits/Cargo.lock
generated
|
@ -3101,6 +3101,7 @@ dependencies = [
|
|||
"base64 0.21.7",
|
||||
"bytes",
|
||||
"cbindgen",
|
||||
"futures",
|
||||
"gcloud-gax",
|
||||
"gcloud-googleapis",
|
||||
"gcloud-pubsub",
|
||||
|
|
|
@ -7,7 +7,7 @@ edition = "2021"
|
|||
crate-type = ["staticlib", "rlib"]
|
||||
|
||||
[features]
|
||||
default = ["zeroidc"]
|
||||
default = ["zeroidc", "ztcontroller"]
|
||||
zeroidc = []
|
||||
ztcontroller = [
|
||||
"dep:serde",
|
||||
|
@ -22,6 +22,7 @@ ztcontroller = [
|
|||
"dep:gcloud-googleapis",
|
||||
"dep:tokio",
|
||||
"dep:tokio-util",
|
||||
"dep:futures",
|
||||
]
|
||||
|
||||
[dependencies]
|
||||
|
@ -56,6 +57,7 @@ prost = { version = "0.14", optional = true, features = ["derive"] }
|
|||
prost-types = { version = "0.14", optional = true }
|
||||
gcloud-gax = { version = "1.2.0", optional = true }
|
||||
gcloud-googleapis = { version = "1.2.0", optional = true }
|
||||
futures = { version = "0.3", optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
testcontainers = { version = "0.24", features = ["blocking"] }
|
||||
|
|
|
@ -530,7 +530,8 @@ pub unsafe extern "C" fn network_listener_new(
|
|||
let id = unsafe { CStr::from_ptr(controller_id) }.to_str().unwrap();
|
||||
|
||||
let rt = runtime::Handle::current();
|
||||
rt.block_on(async {
|
||||
let _block = rt.enter();
|
||||
futures::executor::block_on(async {
|
||||
match NetworkListener::new(id, Duration::from_secs(listen_timeout), callback, user_ptr).await {
|
||||
Ok(listener) => Arc::into_raw(listener),
|
||||
Err(e) => {
|
||||
|
@ -562,7 +563,9 @@ pub unsafe extern "C" fn network_listener_listen(ptr: *const NetworkListener) ->
|
|||
let listener = ManuallyDrop::new(unsafe { Arc::from_raw(ptr) });
|
||||
|
||||
let rt = runtime::Handle::current();
|
||||
match rt.block_on(listener.listen()) {
|
||||
let _guard = rt.enter();
|
||||
|
||||
match futures::executor::block_on(listener.listen()) {
|
||||
Ok(_) => {
|
||||
println!("Network listener started successfully");
|
||||
true
|
||||
|
@ -586,7 +589,9 @@ pub unsafe extern "C" fn network_listener_change_handler(ptr: *const NetworkList
|
|||
let listener = ManuallyDrop::new(unsafe { Arc::from_raw(ptr) });
|
||||
|
||||
let rt = runtime::Handle::current();
|
||||
match rt.block_on(listener.change_handler()) {
|
||||
let _guard = rt.enter();
|
||||
|
||||
match futures::executor::block_on(listener.change_handler()) {
|
||||
Ok(_) => {
|
||||
println!("Network listener change listener completed successfully");
|
||||
}
|
||||
|
@ -616,7 +621,8 @@ pub unsafe extern "C" fn member_listener_new(
|
|||
let id = unsafe { CStr::from_ptr(controller_id) }.to_str().unwrap();
|
||||
|
||||
let rt = runtime::Handle::current();
|
||||
rt.block_on(async {
|
||||
let _block = rt.enter();
|
||||
futures::executor::block_on(async {
|
||||
match MemberListener::new(id, Duration::from_secs(listen_timeout), callback, user_ptr).await {
|
||||
Ok(listener) => Arc::into_raw(listener),
|
||||
Err(e) => {
|
||||
|
@ -647,7 +653,8 @@ pub unsafe extern "C" fn member_listener_listen(ptr: *const MemberListener) -> b
|
|||
|
||||
let listener = ManuallyDrop::new(unsafe { Arc::from_raw(ptr) });
|
||||
let rt = runtime::Handle::current();
|
||||
match rt.block_on(listener.listen()) {
|
||||
let _guard = rt.enter();
|
||||
match futures::executor::block_on(listener.listen()) {
|
||||
Ok(_) => {
|
||||
println!("Member listener started successfully");
|
||||
true
|
||||
|
@ -671,7 +678,8 @@ pub unsafe extern "C" fn member_listener_change_handler(ptr: *const MemberListen
|
|||
let listener = ManuallyDrop::new(unsafe { Arc::from_raw(ptr) });
|
||||
|
||||
let rt = runtime::Handle::current();
|
||||
match rt.block_on(listener.change_handler()) {
|
||||
let _guard = rt.enter();
|
||||
match futures::executor::block_on(listener.change_handler()) {
|
||||
Ok(_) => {
|
||||
println!("Member listener change listener completed successfully");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue