Primeiro, provavelmente vale a pena descompactar o que "observar" significa em:
Que tipo de mecanismos DBus fornece para contagem de referência em objetos exportados, existe uma maneira de saber quando processos zero estão atualmente "observando" um objeto?
O único sentido em que faz sentido perguntar se algo está "observando" um objeto DBus é se um cliente receberá qualquer sinal que o objeto aumente; não há outro conceito de observação, apenas passagem de mensagens. Os clientes fazem isso chamando AddMatch / RemoveMatch no barramento, então você poderia, teoricamente, referenciar as contagens. Isso parece um método propenso a erros - basicamente, você precisará reimplementar o manipulador de correspondência do daemon para ter certeza de que capturou todas as maneiras pelas quais um cliente pode ouvir seus sinais.
No entanto, se tudo o que você deseja é limpeza depois de travar clientes, existe uma maneira - cada cliente DBus obtém um ID de barramento exclusivo (por exemplo, :1.693
) alocado pelo daemon. Quando um cliente solicita um arquivo através de sua API DBus, você pode gravar seu id de barramento e, em seguida, observar o sinal NameOwnerChanged
de org.freedesktop.DBus
. Este sinal tem 3 partes - o nome do barramento (que, nos casos em que estamos interessados, será o único ID do barramento), o id do barramento do novo proprietário e o ID do barramento do proprietário antigo.
Portanto, se você obtiver um sinal NameOwnerChanged
com name=":1.693"
, new_owner=""
e old_owner=":1.693"
, saberá que o cliente com id de barramento :1.693
foi desconectado do barramento e pode remover quaisquer objetos que o cliente estava usando.
Você gostaria de fazer isso além de ter clientes informando explicitamente seu serviço quando eles terminam com um arquivo, é claro.
Editar:
Quanto à sua pergunta global - o que deve ser a API - sugiro que isso pareça complexo o suficiente para que seus objetos DBus não sejam a API principal. Embrulhe isto em um python-dmedia-client
(e possivelmente um C libdmedia-client
), e manuseie a contagem de ref e a complexidade lá.