switch(event->type) {
case IOEVENT_TIMEOUT:
entry->callback(entry->data);
+ entry->iofd = NULL;
timeq_del(entry);
break;
default:
perror("malloc() failed");
return NULL;
}
+ #ifdef HAVE_THREADS
if(!pthread_mutex_initialized) {
THREAD_MUTEX_INIT(synchronized);
pthread_mutex_initialized = 1;
}
+ #endif
gettimeofday(&timeout, NULL);
SYNCHRONIZE(synchronized);
timeout.tv_usec += (useconds % 1000);
entry->name = NULL;
entry->next = timeq_events;
entry->prev = NULL;
- timeq_events->prev = entry;
+ if(timeq_events)
+ timeq_events->prev = entry;
timeq_events = entry;
DESYNCHRONIZE(synchronized);
return entry;
}
int timeq_del(struct timeq_entry* entry) {
+ #ifdef HAVE_THREADS
if(!pthread_mutex_initialized) return 0;
+ #endif
SYNCHRONIZE(synchronized);
if(entry->next)
entry->next->prev = entry->prev;
timeq_events = entry->next;
if(entry->name)
free(entry->name);
- iohandler_close(entry->iofd);
+ if(entry->iofd)
+ iohandler_close(entry->iofd);
free(entry);
DESYNCHRONIZE(synchronized);
return 1;