wayland/drm-lease: Make MetaDrmLeaseManager::connectors a GList
The relationship between MetaKmsConnector and MetaDrmLease is already stored in MetaDrmLeaseManager::leased_connectors. Change the type of MetaDrmLeaseManager::connectors to a GList. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3922>
This commit is contained in:
@ -71,14 +71,12 @@ struct _MetaDrmLeaseManager
|
|||||||
|
|
||||||
/* MetaKmsDevice *kms_device */
|
/* MetaKmsDevice *kms_device */
|
||||||
GList *devices;
|
GList *devices;
|
||||||
|
/* MetaKmsConnector *kms_connector */
|
||||||
|
GList *connectors;
|
||||||
/* Key: uint32_t lessee_id
|
/* Key: uint32_t lessee_id
|
||||||
* Value: MetaDrmLease *lease
|
* Value: MetaDrmLease *lease
|
||||||
*/
|
*/
|
||||||
GHashTable *leases;
|
GHashTable *leases;
|
||||||
/* Key: MetaKmsConnector *kms_connector
|
|
||||||
* Value: MetaDrmLease *lease
|
|
||||||
*/
|
|
||||||
GHashTable *connectors;
|
|
||||||
/* Key: MetaKmsConnector *kms_connector
|
/* Key: MetaKmsConnector *kms_connector
|
||||||
* Value: MetaDrmLease *lease
|
* Value: MetaDrmLease *lease
|
||||||
*/
|
*/
|
||||||
@ -454,8 +452,10 @@ set_connectors_as_leased (MetaDrmLeaseManager *lease_manager,
|
|||||||
LeasingKmsAssignment *assignment = l->data;
|
LeasingKmsAssignment *assignment = l->data;
|
||||||
MetaKmsConnector *kms_connector = assignment->connector;
|
MetaKmsConnector *kms_connector = assignment->connector;
|
||||||
|
|
||||||
if (g_hash_table_steal (lease_manager->connectors, kms_connector))
|
if (g_list_find (lease_manager->connectors, kms_connector))
|
||||||
{
|
{
|
||||||
|
lease_manager->connectors = g_list_remove (lease_manager->connectors,
|
||||||
|
kms_connector);
|
||||||
g_hash_table_insert (lease_manager->leased_connectors, kms_connector,
|
g_hash_table_insert (lease_manager->leased_connectors, kms_connector,
|
||||||
lease);
|
lease);
|
||||||
connectors = g_list_append (connectors, kms_connector);
|
connectors = g_list_append (connectors, kms_connector);
|
||||||
@ -486,7 +486,8 @@ set_connectors_as_available (MetaDrmLeaseManager *lease_manager,
|
|||||||
|
|
||||||
if (g_hash_table_steal (lease_manager->leased_connectors, kms_connector))
|
if (g_hash_table_steal (lease_manager->leased_connectors, kms_connector))
|
||||||
{
|
{
|
||||||
g_hash_table_insert (lease_manager->connectors, kms_connector, NULL);
|
lease_manager->connectors = g_list_append (lease_manager->connectors,
|
||||||
|
kms_connector);
|
||||||
connectors = g_list_append (connectors, kms_connector);
|
connectors = g_list_append (connectors, kms_connector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -569,18 +570,7 @@ GList *
|
|||||||
meta_drm_lease_manager_get_connectors (MetaDrmLeaseManager *lease_manager,
|
meta_drm_lease_manager_get_connectors (MetaDrmLeaseManager *lease_manager,
|
||||||
MetaKmsDevice *kms_device)
|
MetaKmsDevice *kms_device)
|
||||||
{
|
{
|
||||||
GHashTableIter iter;
|
return g_list_copy (lease_manager->connectors);
|
||||||
MetaKmsConnector *connector;
|
|
||||||
GList *connectors = NULL;
|
|
||||||
|
|
||||||
g_hash_table_iter_init (&iter, lease_manager->connectors);
|
|
||||||
while (g_hash_table_iter_next (&iter, (gpointer *)&connector, NULL))
|
|
||||||
{
|
|
||||||
if (meta_kms_connector_get_device (connector) == kms_device)
|
|
||||||
connectors = g_list_append (connectors, connector);
|
|
||||||
}
|
|
||||||
|
|
||||||
return connectors;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MetaDrmLease *
|
MetaDrmLease *
|
||||||
@ -638,7 +628,7 @@ update_connectors (MetaDrmLeaseManager *lease_manager,
|
|||||||
GList **leases_to_revoke_out)
|
GList **leases_to_revoke_out)
|
||||||
{
|
{
|
||||||
MetaKms *kms = lease_manager->kms;
|
MetaKms *kms = lease_manager->kms;
|
||||||
GHashTable *new_connectors;
|
GList *new_connectors;
|
||||||
GHashTable *new_leased_connectors;
|
GHashTable *new_leased_connectors;
|
||||||
MetaDrmLease *lease = NULL;
|
MetaDrmLease *lease = NULL;
|
||||||
GList *l;
|
GList *l;
|
||||||
@ -649,7 +639,7 @@ update_connectors (MetaDrmLeaseManager *lease_manager,
|
|||||||
MetaKmsConnector *kms_connector;
|
MetaKmsConnector *kms_connector;
|
||||||
GHashTableIter iter;
|
GHashTableIter iter;
|
||||||
|
|
||||||
new_connectors = g_hash_table_new_similar (lease_manager->connectors);
|
new_connectors = g_list_copy (lease_manager->connectors);
|
||||||
new_leased_connectors =
|
new_leased_connectors =
|
||||||
g_hash_table_new_similar (lease_manager->leased_connectors);
|
g_hash_table_new_similar (lease_manager->leased_connectors);
|
||||||
|
|
||||||
@ -665,11 +655,11 @@ update_connectors (MetaDrmLeaseManager *lease_manager,
|
|||||||
if (!meta_kms_connector_is_for_lease (kms_connector))
|
if (!meta_kms_connector_is_for_lease (kms_connector))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (g_hash_table_steal_extended (lease_manager->connectors,
|
if (g_list_find (lease_manager->connectors, kms_connector))
|
||||||
kms_connector,
|
|
||||||
NULL, (gpointer *) &lease))
|
|
||||||
{
|
{
|
||||||
g_hash_table_insert (new_connectors, kms_connector, lease);
|
lease_manager->connectors =
|
||||||
|
g_list_remove (lease_manager->connectors, kms_connector);
|
||||||
|
new_connectors = g_list_append (new_connectors, kms_connector);
|
||||||
}
|
}
|
||||||
else if (g_hash_table_steal_extended (lease_manager->leased_connectors,
|
else if (g_hash_table_steal_extended (lease_manager->leased_connectors,
|
||||||
kms_connector,
|
kms_connector,
|
||||||
@ -680,14 +670,17 @@ update_connectors (MetaDrmLeaseManager *lease_manager,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
added_connectors = g_list_append (added_connectors, kms_connector);
|
added_connectors = g_list_append (added_connectors, kms_connector);
|
||||||
g_hash_table_insert (new_connectors, kms_connector, lease);
|
new_connectors = g_list_append (new_connectors, kms_connector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_hash_table_iter_init (&iter, lease_manager->connectors);
|
for (l = lease_manager->connectors; l; l = l->next)
|
||||||
while (g_hash_table_iter_next (&iter, (gpointer *)&kms_connector, NULL))
|
{
|
||||||
removed_connectors = g_list_append (removed_connectors, kms_connector);
|
kms_connector = l->data;
|
||||||
|
|
||||||
|
removed_connectors = g_list_append (removed_connectors, kms_connector);
|
||||||
|
}
|
||||||
|
|
||||||
g_hash_table_iter_init (&iter, lease_manager->leased_connectors);
|
g_hash_table_iter_init (&iter, lease_manager->leased_connectors);
|
||||||
while (g_hash_table_iter_next (&iter, (gpointer *)&kms_connector, NULL))
|
while (g_hash_table_iter_next (&iter, (gpointer *)&kms_connector, NULL))
|
||||||
@ -698,7 +691,7 @@ update_connectors (MetaDrmLeaseManager *lease_manager,
|
|||||||
leases_to_revoke = g_list_append (leases_to_revoke, lease);
|
leases_to_revoke = g_list_append (leases_to_revoke, lease);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_clear_pointer (&lease_manager->connectors, g_hash_table_unref);
|
g_list_free (g_steal_pointer (&lease_manager->connectors));
|
||||||
lease_manager->connectors = new_connectors;
|
lease_manager->connectors = new_connectors;
|
||||||
|
|
||||||
g_clear_pointer (&lease_manager->leased_connectors, g_hash_table_unref);
|
g_clear_pointer (&lease_manager->leased_connectors, g_hash_table_unref);
|
||||||
@ -881,10 +874,6 @@ meta_drm_lease_manager_constructed (GObject *object)
|
|||||||
g_hash_table_new_full (NULL, NULL,
|
g_hash_table_new_full (NULL, NULL,
|
||||||
NULL,
|
NULL,
|
||||||
(GDestroyNotify) g_object_unref);
|
(GDestroyNotify) g_object_unref);
|
||||||
|
|
||||||
lease_manager->connectors =
|
|
||||||
g_hash_table_new_full (NULL, NULL,
|
|
||||||
NULL, NULL);
|
|
||||||
lease_manager->leased_connectors = g_hash_table_new (NULL, NULL);
|
lease_manager->leased_connectors = g_hash_table_new (NULL, NULL);
|
||||||
|
|
||||||
update_resources (lease_manager);
|
update_resources (lease_manager);
|
||||||
@ -936,8 +925,9 @@ meta_drm_lease_manager_dispose (GObject *object)
|
|||||||
g_clear_signal_handler (&lease_manager->lease_changed_handler_id, kms);
|
g_clear_signal_handler (&lease_manager->lease_changed_handler_id, kms);
|
||||||
|
|
||||||
g_list_free_full (g_steal_pointer (&lease_manager->devices), g_object_unref);
|
g_list_free_full (g_steal_pointer (&lease_manager->devices), g_object_unref);
|
||||||
|
g_list_free_full (g_steal_pointer (&lease_manager->connectors),
|
||||||
|
g_object_unref);
|
||||||
g_clear_pointer (&lease_manager->leases, g_hash_table_unref);
|
g_clear_pointer (&lease_manager->leases, g_hash_table_unref);
|
||||||
g_clear_pointer (&lease_manager->connectors, g_hash_table_unref);
|
|
||||||
g_clear_pointer (&lease_manager->leased_connectors, g_hash_table_unref);
|
g_clear_pointer (&lease_manager->leased_connectors, g_hash_table_unref);
|
||||||
|
|
||||||
G_OBJECT_CLASS (meta_drm_lease_manager_parent_class)->dispose (object);
|
G_OBJECT_CLASS (meta_drm_lease_manager_parent_class)->dispose (object);
|
||||||
|
Reference in New Issue
Block a user