/* Param address is only used for ELDBUS_CONNECTION_TYPE_ADDRESS type */
static Eldbus_Connection *
-_connection_get(Eldbus_Connection_Type type, const char *address)
+_connection_get(Eldbus_Connection_Type type, const char *address, Eina_Bool shared)
{
Eldbus_Connection *conn;
DBusError err;
conn->type = type;
conn->refcount = 1;
+ conn->shared = !!shared;
EINA_MAGIC_SET(conn, ELDBUS_CONNECTION_MAGIC);
conn->names = eina_hash_string_superfast_new(NULL);
eldbus_connection_setup(conn);
eldbus_private_connection_get(Eldbus_Connection_Type type)
{
DBG("Getting private connection with type %d", type);
- return _connection_get(type, NULL);
+ return _connection_get(type, NULL, EINA_FALSE);
}
EAPI Eldbus_Connection *
return eldbus_connection_ref(conn);
}
- conn = _connection_get(type, NULL);
+ conn = _connection_get(type, NULL, EINA_TRUE);
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
shared_connections[type - 1] = conn;
return eldbus_connection_ref(conn);
}
- conn = _connection_get(ELDBUS_CONNECTION_TYPE_ADDRESS, address);
+ conn = _connection_get(ELDBUS_CONNECTION_TYPE_ADDRESS, address, EINA_TRUE);
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
eina_hash_add(address_connections, address, conn);
eldbus_private_address_connection_get(const char *address)
{
DBG("Getting private connection with address %s", address);
- return _connection_get(ELDBUS_CONNECTION_TYPE_ADDRESS, address);
+ return _connection_get(ELDBUS_CONNECTION_TYPE_ADDRESS, address, EINA_FALSE);
}
EAPI Eldbus_Connection *
eldbus_data_del_all(&conn->data);
if (conn->idler) ecore_idler_del(conn->idler);
- if (conn->type)
+ if (conn->type && conn->shared)
{
if (conn->type == ELDBUS_CONNECTION_TYPE_ADDRESS)
eina_hash_del_by_data(address_connections, conn);