#if defined(DBUS_ENABLE_CHECKS) || defined(DBUS_ENABLE_ASSERT)
int generation; /**< _dbus_current_generation that should correspond to this connection */
#endif
+ unsigned int is_kdbus; /* Samsung change: to spare comparing address too often. 0 - uninitialized, 1 - not kdbus, 2 - kdbus */
};
static DBusDispatchStatus _dbus_connection_get_dispatch_status_unlocked (DBusConnection *connection);
return NULL;
}
+unsigned int dbus_connection_get_is_kdbus(DBusConnection *connection)
+{
+ return connection->is_kdbus;
+}
+
+void dbus_connection_set_is_kdbus(DBusConnection *connection, unsigned int value)
+{
+ connection->is_kdbus = value;
+}
+
/* Called with lock held, does not update dispatch status */
static void
_dbus_connection_send_preallocated_unlocked_no_update (DBusConnection *connection,
DBUS_EXPORT
dbus_bool_t dbus_connection_get_is_connected (DBusConnection *connection);
DBUS_EXPORT
+unsigned int dbus_connection_get_is_kdbus (DBusConnection *connection);
+DBUS_EXPORT
+void dbus_connection_set_is_kdbus (DBusConnection *connection, unsigned int value);
+DBUS_EXPORT
dbus_bool_t dbus_connection_get_is_authenticated (DBusConnection *connection);
DBUS_EXPORT
dbus_bool_t dbus_connection_set_is_authenticated (DBusConnection *connection);
/**
* Checks if the connection's transport is kdbus on the basis of its address
+ * saves result in DBusConnection for performance.
*
* @param pointer to the connection
* @returns TRUE if kdbus transport, otherwise FALSE
*/
dbus_bool_t dbus_transport_is_kdbus(DBusConnection *connection)
{
- const char* address = _dbus_connection_get_address(connection);
+ unsigned int is_kdbus;
- if(address)
- if(address == strstr(address, "kdbus:path="))
+ is_kdbus = dbus_connection_get_is_kdbus(connection);
+ if(is_kdbus == 0)
+ {
+ const char* address = _dbus_connection_get_address(connection);
+
+ if(address)
+ {
+ if(address == strstr(address, "kdbus:path="))
+ {
+ dbus_connection_set_is_kdbus(connection, 2);
return TRUE;
+ } else {
+ dbus_connection_set_is_kdbus(connection, 1);
+ return FALSE;
+ }
+ }
+ }
+
+ if(is_kdbus == 2) return TRUE;
+ if(is_kdbus == 1) return FALSE;
+
+ _dbus_verbose("is_kdbus is not 0 or 1 or 2. Should not happen! \n");
return FALSE;
}