Nous avons migré une application C++ RHEL 5.4 de RH 6.2 et nous avons constaté que l'application était défectueuse. Une de nos investigations a conduit à la conclusion que le code dans la case 5.4 fait référence à 'futex'. Remarque sur l'application est compilée en utilisant l'option de compilation 32 bits -Linux futex 5.4 OS Kernel version 2.6.9 donnant des problèmes
grep futex tool_strace.txt futex(0xff8ea454, FUTEX_WAKE_PRIVATE, 1) = 0 futex(0xf6d1f4fc, FUTEX_WAKE_PRIVATE, 2147483647) = 0 futex(0xf6c10a4c, FUTEX_WAKE_PRIVATE, 2147483647) = 0 As per http://www.akkadia.org/drepper/assumekernel.html I added the code on 5.4 build - setenv("LD_ASSUME_KERNEL" , "2.4.1" , 1); // to use Linux Threads
Mais la décharge strace me montre encore « futex » être appelé.
Toutes les adresses ff8ea454, f6d1f4fc et f6c10a4c sont des adresses de 32 bits. Donc, si ma supposition est juste, comment puis-je coder que les appels «futex» peuvent être supprimés ou ne pas être appelés du tout.
Y at-il un problème connu avec les appels futex?
Voici la configuration du système - Linux 2.6.18-164.el5 # 1 SMP Mar 18 15:51:48 EDT août 2009 x86_64 x86_64 x86_64 GNU/Linux S'il vous plaît laissez-moi savoir ce que nous pouvons faire autre que cela pour éviter le problème? – Prakash
Supprimez LD_ASSUME_KERNEL, recompilez votre code et corrigez correctement les bogues qui l'empêchent de fonctionner. –
Vous utilisez en effet l'architecture AMD64, je vous suggère donc de compiler votre code sous cette forme. –