2010-11-25 7 views
0

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?

Répondre

1

Je crois que ce qui suit est vrai:

  1. LD_ASSUME_KERNEL doit être réglé avant que votre programme commence à avoir un effet. Futex est utilisé pour implémenter n'importe quel type de verrou, donc vous ne pouvez pas l'éviter.
  2. Vous ne devriez pas avoir besoin de LD_ASSUME_KERNEL lorsque vous compilez votre propre code, car il devrait utiliser des interfaces plus récentes, selon le cas.
  3. 2.4.1 est une ancienne version du noyau à essayer de travailler en tant que. Étant donné que vous mentionnez des compilations 32 bits, vous suggérez que vous utilisez une machine d'architecture AMD64, et il se peut même que cela ne prenne même pas en charge les bibliothèques qui retournent aussi loin.
+0

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

+1

Supprimez LD_ASSUME_KERNEL, recompilez votre code et corrigez correctement les bogues qui l'empêchent de fonctionner. –

+1

Vous utilisez en effet l'architecture AMD64, je vous suggère donc de compiler votre code sous cette forme. –

Questions connexes