mirror of
https://github.com/ZeroTier/ZeroTierOne
synced 2025-08-19 21:03:57 -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",
|
"base64 0.21.7",
|
||||||
"bytes",
|
"bytes",
|
||||||
"cbindgen",
|
"cbindgen",
|
||||||
|
"futures",
|
||||||
"gcloud-gax",
|
"gcloud-gax",
|
||||||
"gcloud-googleapis",
|
"gcloud-googleapis",
|
||||||
"gcloud-pubsub",
|
"gcloud-pubsub",
|
||||||
|
|
|
@ -7,7 +7,7 @@ edition = "2021"
|
||||||
crate-type = ["staticlib", "rlib"]
|
crate-type = ["staticlib", "rlib"]
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["zeroidc"]
|
default = ["zeroidc", "ztcontroller"]
|
||||||
zeroidc = []
|
zeroidc = []
|
||||||
ztcontroller = [
|
ztcontroller = [
|
||||||
"dep:serde",
|
"dep:serde",
|
||||||
|
@ -22,6 +22,7 @@ ztcontroller = [
|
||||||
"dep:gcloud-googleapis",
|
"dep:gcloud-googleapis",
|
||||||
"dep:tokio",
|
"dep:tokio",
|
||||||
"dep:tokio-util",
|
"dep:tokio-util",
|
||||||
|
"dep:futures",
|
||||||
]
|
]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
@ -56,6 +57,7 @@ prost = { version = "0.14", optional = true, features = ["derive"] }
|
||||||
prost-types = { version = "0.14", optional = true }
|
prost-types = { version = "0.14", optional = true }
|
||||||
gcloud-gax = { version = "1.2.0", optional = true }
|
gcloud-gax = { version = "1.2.0", optional = true }
|
||||||
gcloud-googleapis = { version = "1.2.0", optional = true }
|
gcloud-googleapis = { version = "1.2.0", optional = true }
|
||||||
|
futures = { version = "0.3", optional = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
testcontainers = { version = "0.24", features = ["blocking"] }
|
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 id = unsafe { CStr::from_ptr(controller_id) }.to_str().unwrap();
|
||||||
|
|
||||||
let rt = runtime::Handle::current();
|
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 {
|
match NetworkListener::new(id, Duration::from_secs(listen_timeout), callback, user_ptr).await {
|
||||||
Ok(listener) => Arc::into_raw(listener),
|
Ok(listener) => Arc::into_raw(listener),
|
||||||
Err(e) => {
|
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 listener = ManuallyDrop::new(unsafe { Arc::from_raw(ptr) });
|
||||||
|
|
||||||
let rt = runtime::Handle::current();
|
let rt = runtime::Handle::current();
|
||||||
match rt.block_on(listener.listen()) {
|
let _guard = rt.enter();
|
||||||
|
|
||||||
|
match futures::executor::block_on(listener.listen()) {
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
println!("Network listener started successfully");
|
println!("Network listener started successfully");
|
||||||
true
|
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 listener = ManuallyDrop::new(unsafe { Arc::from_raw(ptr) });
|
||||||
|
|
||||||
let rt = runtime::Handle::current();
|
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(_) => {
|
Ok(_) => {
|
||||||
println!("Network listener change listener completed successfully");
|
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 id = unsafe { CStr::from_ptr(controller_id) }.to_str().unwrap();
|
||||||
|
|
||||||
let rt = runtime::Handle::current();
|
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 {
|
match MemberListener::new(id, Duration::from_secs(listen_timeout), callback, user_ptr).await {
|
||||||
Ok(listener) => Arc::into_raw(listener),
|
Ok(listener) => Arc::into_raw(listener),
|
||||||
Err(e) => {
|
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 listener = ManuallyDrop::new(unsafe { Arc::from_raw(ptr) });
|
||||||
let rt = runtime::Handle::current();
|
let rt = runtime::Handle::current();
|
||||||
match rt.block_on(listener.listen()) {
|
let _guard = rt.enter();
|
||||||
|
match futures::executor::block_on(listener.listen()) {
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
println!("Member listener started successfully");
|
println!("Member listener started successfully");
|
||||||
true
|
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 listener = ManuallyDrop::new(unsafe { Arc::from_raw(ptr) });
|
||||||
|
|
||||||
let rt = runtime::Handle::current();
|
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(_) => {
|
Ok(_) => {
|
||||||
println!("Member listener change listener completed successfully");
|
println!("Member listener change listener completed successfully");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue