Accéder au contenu.
Menu Sympa

fr - Re: 100 level deep in subroutine calls [sympa]

Objet : Pour les administrateurs de serveurs de listes utilisant le logiciel Sympa

Archives de la liste

Chronologique Discussions  
  • From: Christophe Wolfhugel <adresse@cachée>
  • To: adresse@cachée
  • Subject: Re: 100 level deep in subroutine calls [sympa]
  • Date: Wed, 4 Feb 1998 11:16:00 +0100

Chose promise, chose due. Voici les explications sur le pourquoi ma pile
se ramassait avant le patch d'hier.

Le code de chargement de la liste des utilisateurs était à peu prêt le
suivant :

my $btree = new DB_File::BTREEINFO;
$btree->{'compare'} = 'List::_compare_addresses';
my $ref = tie %users, 'DB_File', undef, O_CREAT|O_RDWR, 0600, $btree;

Plutôt qu'utiliser $DB_HASH (variable globale), un nouvel objet était
créé à chaque fois ; l'idée de départ étant de permettre des fonctions de
tri différentes selon les listes.

Le hic et le défaut concerne la mortalité de $btree : en fin de fonction
de chargement $btree est détruit par les éboueurs de Perl, mais le hash
reste actif... le "tie" ne compte pas l'utilisation de $btree. Je ne saurais
dire s'il devrait le faire.

Avec cette erreur de programmation, en sortie de fonction, le programme passe
discretement par croak qui sort un peu plus vite que prévu de la fonction,
sans dépiler ce qu'il faut.

La solution finale sera de conserver $btree aussi longtemps que le hash
existe, c'est à dire en stockant l'objet dans la structure de la liste. En
attendant, l'usage de $DB_BTREE fait l'affaire.

Pour utiliser des fonctions de tri différentes il faut que je modifie le
programme pour évaluer un bloc de code (la fonction de tri) au chargement de
la liste, puisque je ne peux pas indiquer d'argument supplémentaire.

--
Christophe Wolfhugel -+- SIS, Institut Pasteur, Paris
Boulot : adresse@cachée, $HOME : adresse@cachée



Archives gérées par MHonArc 2.6.19+.

Haut de le page