IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POSIX C Discussion :

sem_wait() ne retourne jamais


Sujet :

POSIX C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Par défaut sem_wait() ne retourne jamais
    Avertissement, ce qui suit est peut-être spécifique à GHDL (un simulateur VHDL libre), je vais tout de même poser ma question puisque personne ne semble pouvoir m'éclairer.

    Essayant de faire communiquer GHDL avec un autre processus, j'utilise les mécanismes POSIX de "named" semaphores et de mémoire partagée. Avant d'intégrer le tout à GHDL, j'ai fait mes tests en écrivant de simples client/serveur utilisant les "named" semaphores POSIX et tout fonctionne à merveille.

    Cependant, en intégrant le tout à GHDL (i.e. à ma librairie partagé VHPI), je suis confronté à un imprévu: le processus GHDL ne se réveille jamais i.e. sem_wait() ne retourne jamais même si une semaphore est "postée" par un autre processus.

    J'arrive à contourner le problème en "poolant" pour la sémaphore, mais je préférerais de loin trouver le problème. Pour ce que ça vaut, voici ce que je fais pour contourner le problème: "while( sem_trywait(csem) == -1 ) usleep(100);" .

    Donc, voici enfin ma question, est-ce que quelqu'un a une idée de ce qui pourrait causer le problème? Qu'est-ce qui pourrait faire en sorte que le sem_wait() ne retourne jamais alors qu'il y a 1 ou + sémaphores de disponible?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Par défaut
    est-ce que ton sem_wait pourrais être équivalent à un truc style pthread_join ?
    C'est à dire qu'il attends la fin d'un processus fils ou une connerie du style ?
    Ou peux-être plus simplement que wait prend un argument quelconque qui s'il est absent fait une boucle infini.

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Par défaut
    Je ne sais pas si sem_wait attend la fin de l'exécution d'un processus enfant...
    Si je me fis à la manpage, rien ne semble indiquer cela ("man sem_wait", voir premier paragraphe de description).

    Pour ce qui est des arguments passé à sem_wait, seul un pointeur sur la sémaphore est attendu.
    Alors ça ne semble pas être cela non plus.

    Merci d'avoir tenté de m'aider, mais malheureusement ça ne semble pas s'appliquer.

    À noter que depuis mon post, j'ai implémenter une librairie partagé similaire à celle pour GHDL mais pour ModelSim et j'ai exactement le même problème. Je dois donc faire qqch de pas correct...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Par défaut
    Attention des fois il y a des manpages incorrect voir ambigue.

    Sinon pour ta librairie je connais pas du tout le contexte donc dur dur de t'aider....

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Par défaut
    Ça m'est difficile de produire un exemple avec le problème puisque les exemples simples fonctionne bien. Jusqu'à maintenant, les problèmes commencent lorsque mon code est une librairie partagé.

    Alors j'comprends tout à fait que tu ne puisses m'aider davantage, merci quand même!
    Sinon, peut-être que ça sonnera une cloche pour qqn d'autre.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Par défaut
    vérifie les données que tu transmets

    faire du débugage en mode pas à pas, et regarde au moment des appels, vérifie les valeurs des données, et les arguments, tout ça.

    et si tu peux pas faire de pas à pas, essaye avec bcp bcp de printf !

Discussions similaires

  1. UserDictionary ne retourne jamais rien
    Par linked dans le forum Android
    Réponses: 1
    Dernier message: 02/02/2012, 02h12
  2. SDL_OpenAudio ne retourne jamais
    Par dancingmad dans le forum SDL
    Réponses: 3
    Dernier message: 20/06/2010, 01h17
  3. fopen ne retourne jamais
    Par Ardeciel dans le forum Bibliothèque standard
    Réponses: 2
    Dernier message: 29/12/2007, 13h47
  4. Retourner un talbeau
    Par taupin dans le forum C
    Réponses: 7
    Dernier message: 19/01/2003, 05h22
  5. [Manip de fichiers] Fonction retournant des infos
    Par sans_atouts dans le forum C
    Réponses: 3
    Dernier message: 24/07/2002, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo