diff options
Diffstat (limited to 'src/arch/sharing')
-rw-r--r-- | src/arch/sharing/instance.c | 10 | ||||
-rw-r--r-- | src/arch/sharing/manager.c | 75 | ||||
-rw-r--r-- | src/arch/sharing/manager.h | 6 |
3 files changed, 11 insertions, 80 deletions
diff --git a/src/arch/sharing/instance.c b/src/arch/sharing/instance.c index c0038aa..39dacec 100644 --- a/src/arch/sharing/instance.c +++ b/src/arch/sharing/instance.c @@ -78,6 +78,11 @@ bool g_shared_instance_init(GSharedInstance *instance, const GSharedInstance *te iface = G_SHARED_INSTANCE_GET_IFACE(instance); + /** + * Le compteur de références des objets GLib doit être incrémenté ici, + * à la différence d'une opération de copie minimaliste. + */ + result = iface->init(instance, template); return result; @@ -104,6 +109,11 @@ void g_shared_instance_quickly_copy(const GSharedInstance *instance, GSharedInst iface = G_SHARED_INSTANCE_GET_IFACE(instance); + /** + * Le compteur de références des objets GLib ne doit pas être incrémenté ici. + * Ce genre de traitement est réservé à la phase d'initialisation. + */ + iface->qck_copy(instance, template); } diff --git a/src/arch/sharing/manager.c b/src/arch/sharing/manager.c index 952fc33..3b7cd01 100644 --- a/src/arch/sharing/manager.c +++ b/src/arch/sharing/manager.c @@ -283,7 +283,7 @@ GSharedInstance *g_share_manager_update(GShareManager *manager, GSharedInstance if (container != NULL) replaced = g_share_container_replace(container, old, result); else - replaced = false; + replaced = true; if (replaced) g_share_manager_put(manager, old); @@ -301,79 +301,6 @@ GSharedInstance *g_share_manager_update(GShareManager *manager, GSharedInstance /****************************************************************************** * * -* Paramètres : manager = gestionnaire d'instance à consulter. * -* instance = instance partagée vouée à évoluer. * -* * -* Description : Prépare une modification légère et locale d'un élément. * -* * -* Retour : Indice de l'élément prêt à être modifié. * -* * -* Remarques : - * -* * -******************************************************************************/ - -size_t g_share_manager_prepare_light_update(GShareManager *manager, GSharedInstance *instance) -{ - size_t result; /* Indice courant à retourner */ -#ifndef NDEBUG - bool found; /* Validation de présence */ -#endif - - g_mutex_lock(&manager->access); - -#ifndef NDEBUG - - found = bsearch_index(&instance, manager->instances, manager->count,sizeof(GSharedInstance *), - (__compar_fn_t)g_shared_instance_quickly_compare, &result); - - assert(found); - -#else - - bsearch_index(&instance, manager->instances, manager->count,sizeof(GSharedInstance *), - (__compar_fn_t)g_shared_instance_quickly_compare, &result); - -#endif - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : manager = gestionnaire d'instance à consulter. * -* instance = instance partagée vouée à évoluer. * -* index = indice de la place de l'élément avant modifcation.* -* * -* Description : Conclut une modification légère et locale d'un élément. * -* * -* Retour : Indice de l'élément prêt à être modifié. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GSharedInstance *g_share_manager_complete_light_update(GShareManager *manager, GSharedInstance *instance, size_t index) -{ - GSharedInstance *result; /* Nouvelle instance à renvoyer*/ - - manager->instances = _qdelete(manager->instances, &manager->count, - sizeof(GSharedInstance *), index); - - g_mutex_unlock(&manager->access); - - result = g_share_manager_get(manager, instance); - - g_object_unref(G_OBJECT(instance)); - - return result; - -} - - -/****************************************************************************** -* * * Paramètres : manager = gestionnaire d'instance à consulter. * * shared = instance partagée à libérer. * * * diff --git a/src/arch/sharing/manager.h b/src/arch/sharing/manager.h index f2fcea6..959087d 100644 --- a/src/arch/sharing/manager.h +++ b/src/arch/sharing/manager.h @@ -65,12 +65,6 @@ GSharedInstance *g_share_manager_get(GShareManager *, GSharedInstance *); /* Met à jour une instance partagée. */ GSharedInstance *g_share_manager_update(GShareManager *, GSharedInstance *, GSharedInstance *, GShareContainer *); -/* Prépare une modification légère et locale d'un élément. */ -size_t g_share_manager_prepare_light_update(GShareManager *, GSharedInstance *); - -/* Conclut une modification légère et locale d'un élément. */ -GSharedInstance *g_share_manager_complete_light_update(GShareManager *, GSharedInstance *, size_t); - /* Abandonne un usage d'une instance partagée. */ void g_share_manager_put(GShareManager *, GSharedInstance *); |