Bonjour à tous,
Voici mon makefile :
Mon problème est ICI : CMODE=-O2 -DNDEBUGifdef RELEASE
CMODE=-O2 -DNDEBUG
else
CMODE=-O0 -g3
endif
CC=g++
CFLAGS=-c -Wall $(CMODE) -I$(ozSVN)
LDFLAGS=-lexpat -lsqlite3
SOURCES=$(ozSVN)/ozxml.cpp $(ozSVN)/ozudpconnect.cpp $(ozSVN)/ozsqlite.cpp $(ozSVN)/ozsocket.cpp bdd.cpp client.cpp config.cpp main.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=ecs_server
all: $(SOURCES) $(EXECUTABLE)
ifeq ($(EXECUTABLE),)
@echo "\$$EXECUTABLE is not define in the Makefile !"
else
ifdef RELEASE
@echo "******** Release mode ********"
else
@echo "******** Debug mode ********"
endif
endif
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
clean:
rm -rf *o $(EXECUTABLE)
rm -rf $(ozSVN)/*o
Lorsque je mets l'option -O2 mon programme compile et lorsque j'utilise un mutex ce dernier reste en attente ... alors qu'il n'y a aucune raison.
Si je mets -O1 ou -O0 le programme marche parfaitement bien.
Ma question est : Y à t'il une spécificité avec cette option ou autre ?
Voici les 2 fonctions de mon mutex :
$gcc --version >> gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)#include <pthread.h>
#define ozMutexType pthread_mutex_t *
static ozMutexType ozMutexOpen()
{
pthread_mutex_t theMutex = PTHREAD_MUTEX_INITIALIZER;
if ( pthread_mutex_init(&theMutex, NULL) != 0)
{
ozAssertFail("Error create mutex !");
return NULL;
}
return &theMutex;
}
static bool ozMutexLock(ozMutexType aMutex)
{
if (aMutex == NULL) //aMutex musn't be null
{
ozAssertFail("aMutex is NULL");
return false;
}
if(pthread_mutex_lock(aMutex) != 0) //Mon programme attend ICI
{
ozAssertFail("Error pthread_mutex_lock !");
return false;
}
return true;
}
Merci d'avance de vos réponses.
Partager