mirror of
https://git.jami.net/savoirfairelinux/jami-daemon.git
synced 2025-08-12 22:09:25 +08:00
Revert "Don't reference count DBus clients, exit core immediately when one of them request it"
It make more sense to keep it as it was. Un the case of a Dataengine, Canonical AppIndicator / KDE Plasmoid systray RFC, the daemon can run event if the client have not been openned or have been closed.
This reverts commit 66a2b8eede
.
This commit is contained in:
@ -2,12 +2,32 @@
|
||||
<node name="/instance-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
|
||||
<interface name="org.sflphone.SFLphone.Instance">
|
||||
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
|
||||
<p></p>
|
||||
<p>Count the number of clients actually registered to the core. When initializing your client, you need to register it against the core by using this interface.</p>
|
||||
</tp:docstring>
|
||||
<method name="Quit" tp:name-for-bindings="Quit">
|
||||
<method name="Register" tp:name-for-bindings="Register">
|
||||
<tp:docstring>
|
||||
Properly quits the core.
|
||||
</tp:docstring>
|
||||
Register a new client to the core. Increments the registration count.
|
||||
</tp:docstring>
|
||||
<arg type="i" name="pid" direction="in">
|
||||
<tp:docstring>
|
||||
The pid of the client process
|
||||
</tp:docstring>
|
||||
</arg>
|
||||
<arg type="s" name="name" direction="in">
|
||||
<tp:docstring>
|
||||
The name of the client
|
||||
</tp:docstring>
|
||||
</arg>
|
||||
</method>
|
||||
<method name="Unregister" tp:name-for-bindings="Unregister">
|
||||
<tp:docstring>
|
||||
Unregister a connected client from the core. Decrements the registration count. If no more clients are connected, ie the registration count equals 0, the core properly quits.
|
||||
</tp:docstring>
|
||||
<arg type="i" name="pid" direction="in">
|
||||
<tp:docstring>
|
||||
The pid of the client process
|
||||
</tp:docstring>
|
||||
</arg>
|
||||
</method>
|
||||
</interface>
|
||||
</node>
|
||||
|
@ -34,11 +34,24 @@
|
||||
Instance::Instance (DBus::Connection& connection)
|
||||
: DBus::ObjectAdaptor (connection, "/org/sflphone/SFLphone/Instance")
|
||||
{
|
||||
count = 0;
|
||||
}
|
||||
|
||||
void
|
||||
Instance::Quit(void)
|
||||
Instance::Register (const int32_t& pid UNUSED,
|
||||
const std::string& name UNUSED)
|
||||
{
|
||||
Manager::instance().terminate();
|
||||
Manager::instance().getDbusManager()->exit();
|
||||
count++;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Instance::Unregister (const int32_t& pid UNUSED)
|
||||
{
|
||||
count --;
|
||||
|
||||
if (count <= 0) {
|
||||
Manager::instance().terminate();
|
||||
Manager::instance().getDbusManager()->exit();
|
||||
}
|
||||
}
|
||||
|
@ -52,10 +52,16 @@ class Instance
|
||||
public DBus::IntrospectableAdaptor,
|
||||
public DBus::ObjectAdaptor
|
||||
{
|
||||
private:
|
||||
int count;
|
||||
|
||||
public:
|
||||
Instance (DBus::Connection& connection);
|
||||
static const char* SERVER_PATH;
|
||||
|
||||
void Quit(void);
|
||||
void Register (const int32_t& pid, const std::string& name);
|
||||
void Unregister (const int32_t& pid);
|
||||
int32_t getRegistrationCount (void);
|
||||
|
||||
};
|
||||
|
||||
|
@ -184,7 +184,7 @@ sflphone_quit ()
|
||||
// Save the history
|
||||
sflphone_save_history ();
|
||||
|
||||
dbus_quit();
|
||||
dbus_unregister (getpid());
|
||||
dbus_clean ();
|
||||
calllist_clean (current_calls);
|
||||
calllist_clean (contacts);
|
||||
@ -315,7 +315,7 @@ void sflphone_fill_account_list (void)
|
||||
|
||||
gboolean sflphone_init (GError **error)
|
||||
{
|
||||
if (!dbus_connect (error))
|
||||
if (!dbus_connect (error) || !dbus_register (getpid (), "Gtk+ Client", error))
|
||||
return FALSE;
|
||||
|
||||
abook_init();
|
||||
|
@ -1098,12 +1098,18 @@ dbus_start_tone (const int start, const guint type)
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
dbus_register (int pid, gchar *name, GError **error)
|
||||
{
|
||||
return org_sflphone_SFLphone_Instance_register (instanceProxy, pid, name, error);
|
||||
}
|
||||
|
||||
void
|
||||
dbus_quit(void)
|
||||
dbus_unregister (int pid)
|
||||
{
|
||||
GError *error = NULL;
|
||||
|
||||
org_sflphone_SFLphone_Instance_quit(instanceProxy, &error);
|
||||
org_sflphone_SFLphone_Instance_unregister (instanceProxy, pid, &error);
|
||||
|
||||
if (error) {
|
||||
ERROR ("Failed to call unregister() on instanceProxy: %s",
|
||||
|
@ -360,9 +360,19 @@ void dbus_set_audio_manager (const gchar *api);
|
||||
void dbus_start_tone (const int start , const guint type);
|
||||
|
||||
/**
|
||||
* Instance - Send unregistration request to dbus services
|
||||
* Instance - Send registration request to dbus service.
|
||||
* Manage the instances of clients connected to the server
|
||||
* @param pid The pid of the processus client
|
||||
* @param name The string description of the client. Here : GTK+ Client
|
||||
* @param error return location for a GError or NULL
|
||||
*/
|
||||
void dbus_quit(void);
|
||||
gboolean dbus_register (int pid, gchar * name, GError **error);
|
||||
|
||||
/**
|
||||
* Instance - Send unregistration request to dbus services
|
||||
* @param pid The pid of the processus
|
||||
*/
|
||||
void dbus_unregister (int pid);
|
||||
|
||||
void dbus_set_sip_address (const gchar* address);
|
||||
|
||||
|
@ -2,12 +2,32 @@
|
||||
<node name="/instance-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
|
||||
<interface name="org.sflphone.SFLphone.Instance">
|
||||
<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
|
||||
<p></p>
|
||||
<p>Count the number of clients actually registered to the core. When initializing your client, you need to register it against the core by using this interface.</p>
|
||||
</tp:docstring>
|
||||
<method name="Quit" tp:name-for-bindings="Quit">
|
||||
<method name="Register" tp:name-for-bindings="Register">
|
||||
<tp:docstring>
|
||||
Properly quits the core.
|
||||
</tp:docstring>
|
||||
Register a new client to the core. Increments the registration count.
|
||||
</tp:docstring>
|
||||
<arg type="i" name="pid" direction="in">
|
||||
<tp:docstring>
|
||||
The pid of the client process
|
||||
</tp:docstring>
|
||||
</arg>
|
||||
<arg type="s" name="name" direction="in">
|
||||
<tp:docstring>
|
||||
The name of the client
|
||||
</tp:docstring>
|
||||
</arg>
|
||||
</method>
|
||||
<method name="Unregister" tp:name-for-bindings="Unregister">
|
||||
<tp:docstring>
|
||||
Unregister a connected client from the core. Decrements the registration count. If no more clients are connected, ie the registration count equals 0, the core properly quits.
|
||||
</tp:docstring>
|
||||
<arg type="i" name="pid" direction="in">
|
||||
<tp:docstring>
|
||||
The pid of the client process
|
||||
</tp:docstring>
|
||||
</arg>
|
||||
</method>
|
||||
</interface>
|
||||
</node>
|
||||
|
Reference in New Issue
Block a user