Skip to content

Commit 0962a6e

Browse files
warusadurabilelmoussaoui
authored andcommitted
server: Fix sessions are not closing when clients leave
Closes #302
1 parent 7303b2f commit 0962a6e

1 file changed

Lines changed: 8 additions & 6 deletions

File tree

server/src/service.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ use oo7::{
1616
use tokio::sync::{Mutex, RwLock};
1717
use tokio_stream::StreamExt;
1818
use zbus::{
19-
names::{OwnedUniqueName, UniqueName},
19+
names::UniqueName,
2020
object_server::SignalEmitter,
2121
proxy::Defaults,
22-
zvariant::{ObjectPath, OwnedObjectPath, OwnedValue, Value},
22+
zvariant::{ObjectPath, Optional, OwnedObjectPath, OwnedValue, Value},
2323
};
2424

2525
use crate::{
@@ -516,14 +516,16 @@ impl Service {
516516
.build();
517517
let mut stream = zbus::MessageStream::for_match_rule(rule, self.connection(), None).await?;
518518
while let Some(message) = stream.try_next().await? {
519+
let body = message.body();
519520
let Ok((_name, old_owner, new_owner)) =
520-
message
521-
.body()
522-
.deserialize::<(String, OwnedUniqueName, OwnedUniqueName)>()
521+
body.deserialize::<(String, Optional<UniqueName<'_>>, Optional<UniqueName<'_>>)>()
523522
else {
524523
continue;
525524
};
526-
assert_eq!(new_owner, ""); // We enforce that in the matching rule
525+
debug_assert!(new_owner.is_none()); // We enforce that in the matching rule
526+
let old_owner = old_owner
527+
.as_ref()
528+
.expect("A disconnected client requires an old_owner");
527529
if let Some(session) = self.session_from_sender(&old_owner).await {
528530
match session.close().await {
529531
Ok(_) => tracing::info!(

0 commit comments

Comments
 (0)