Segmentation fault sur mutex!
Salut,
petit souci de compilation. Je veux mettre en place un mutex sur un objet de communication qui est partagé par plusieurs thread. Jusque la, pas de souci. Jusqu'avant, je mettais un simple flag true/false pour gérer mes écriture concurente. Mais autant faire juste, et passer par un mutes.
Bref, je remplace le tout par un mutex, je tente, et... Ben je me récupère un segmentation fault quand je lance le programme (qui se traduit par un "No source available for "pthread_mutex_lock() " " quand je fais du debug depuis Eclipse...
Voici le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| Queue::Queue() {
// TODO Auto-generated constructor stub
this->start_list = 0;
this->end_list = 0;
this->mutex = PTHREAD_MUTEX_INITIALIZER;
}
/**
* Destructor function
* @return void
*/
Queue::~Queue() {
// TODO Auto-generated destructor stub
}
/**
* send message function. write message on msg list
* @param msg *message pointer where to insert message
* @return bool Return true if finish, false if error
*/
bool Queue::send_msg( msg * message ){
pthread_mutex_lock (& this->mutex);
int pos;
if( ( this->end_list + 1 != this->start_list ) &&
( ! ( ( this->end_list == MSG_NBR_MAX ) && ( this->start_list == 0 ) ) ) )
{
//if(this->end_list != MSG_NBR_MAX )
pos = this->end_list;
// else
// pos = 0;
this->list_msg[pos].cmd_id = message->cmd_id;
this->list_msg[pos].urgent = message->urgent;
this->list_msg[pos].lenght = message->lenght;
this->list_msg[pos].sender_id = message->sender_id;
for(unsigned int i = 0; i < 3; i++)
this->list_msg[pos].msg_id[i] = message->msg_id[i];
for(unsigned int i = 0; i < message->lenght; i++)
this->list_msg[pos].params[i] = message->params[i];
if(this->end_list != MSG_NBR_MAX - 1 )
this->end_list++;
else
this->end_list = 0;
}
pthread_mutex_unlock (& this->mutex);
return true;
} |
Et mon mutex est bien déclaré dans mon .h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Queue {
private:
msg list_msg[MSG_NBR_MAX];
pthread_mutex_t mutex;
int start_list;
int end_list;
public:
Queue();
virtual ~Queue();
bool send_msg(msg * message);
bool get_msg(msg * message);
int get_nbr_msg();
};
#endif /* QUEUE_H_ */ |
L'un de vous aurait une idée? C'est vraiment au moment d'entrer dans send_msg() que je pars en segmentation fault.
Je vois pas ce que j'ai fait de faux...
Merci.
Onet