Ciao a tutti!

Non riesco a risolvere questo problema. Il codice sorgente è il seguente:

codice:
void func()
{
int condTW;
struct timespec ts;
pthread_mutex_t tlock;
pthread_cond_t tready;
...
if(pthread_mutex_init(&tlock, NULL) != 0)
        	PrintError("tlock pthread_mutex_init() error: ");
if(pthread_cond_init(&tready, NULL) != 0)
        	PrintError("tready pthread_cond_init() error: ");
...
...
while(!ReReadCfg){
if(clock_gettime(CLOCK_REALTIME,&ts)==-1)
		PrintError("clock_gettime() error: ");				
ts.tv_sec += 3;
if(pthread_mutex_lock(&tlock)!=0)
	PrintError("pthread_mutex_lock() error: ");
if(condTW=(pthread_cond_timedwait(&tready,&tlock,&ts))!=0){
	if(errno==ETIMEDOUT){
		if(pthread_mutex_unlock(&tlock)!=0){
			PrintError("pthread_mutex_unlock() error: ");
			continue;
		}
		else
			PrintError("pthread_cond_wait() error: ");			
	}
}
....
....
}
Il problema è che la pthread_cond_timedwait mi ritorna sempre e subito 1 e non si mette mai in attesa per i secondi che gli ho indicato. Andando a leggere errno mi ritorna "Bad file descriptor". Non capisco quale dei tre parametri ha problemi (anche se i miei sospetti vanno sulla struct timespec forse non inizializzata a dovere).