On Friday 24 August 2007 12:47, Frédéric wrote:
> Dans mon progamme python, lors d'une transformation xslt (faite avec le
> module python lxml, basé sur la libxml2), le tout dans un serveur Pyro
> (genre de xml-rpc, en mieux), j'ai un seg. fault du serveur. Un strace
> me dit que je reçois le signal ERESTARTNOHAND.
>
> Or, en fouillant sur le web, on peut lire :
>
> "ERESTARTNOHAND is a kernel specific errno (in a kernel tree look for
> include/linux/errno.h). ERESTARTNOHAND signals the caller that they
> should restart if there is no handler. A userspace app should never see
> this (I don't know if it's even supposed to show up at the libc level).
>
> This leads to an interesting question, if libc is looping hard on select
> w/ERESTARTNOHAND then perhaps the loop is in libc (which seems
> unlikely). I think a better thing than strace would be to kill -SEGV the
> process when it's looping hard and see what the back trace is."
>
> Donc d'après ceci, on ne devrait jamais recevoir ce signal !!!
>
> J'ai testé mon appel au filtre xslt en dehors de Pyro : ça marche. J'ai
> fait un petit serveur Pyro avec l'appel : ça marche aussi. Le plantage
> ne survient que dans le vrai serveur, qui est assez chargé au niveau des
> appels clients.
>
> Or, une autre personne (une développeur de chez Logilab) a le même
> soucis, mais chez lui, le plantage survient dans la librairie cliente
> MySQL. Mais pareil, uniquement sous forte charge.
>
> Quelqu'un aurait-il une idée du problème, par hasard ?
Au fait, j'ai oublié de donner des nouvelles de ce problème. En fait, dans
mon script python, je faisais un 'deepcopy' sur un objet (un deepcopy fait
une copie de l'objet en question, ainsi que des objets référencés, et ceux
référencés par les objets référencés... Bref, vous avez compris !).
Or, l'objet en question est en fait issu d'un module en C, et il y avait un
petit bug à ce niveau. Résultat, quelques références devaient se perdre,
et paf le chien ! Le développeur du module (lxml) a d'ailleurs corrigé ça
dans la dernière béta (2.0).
En fait, l'erreur initiale était un bête SIGSEGV ; ERESTARTNOHAND n'était
qu'une conséquence (sur les autres threads)...
Voili-voilou. J'imagine que vous vous en fichez, mais bon, c'est pour les
archives !
--
Frédéric
http://www.gbiloba.org