CFLAGS="$CFLAGS -D_GNU_SOURCE"
# Checks for header files.
-AC_CHECK_HEADERS([arpa/inet.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h windows.h winsock2.h pthread.h sys/epoll.h sys/kevent.h openssl/ssl.h openssl/err.h openssl/rand.h])
+AC_CHECK_HEADERS([stdio.h stdlib.h string.h ctype.h windows.h winsock2.h malloc.h features.h sys/types.h sys/socket.h netinet/in.h netinet/tcp.h arpa/inet.h netdb.h sys/wait.h errno.h unistd.h getopt.h stdarg.h sys/time.h time.h signal.h sys/epoll.h sys/event.h ws2tcpip.h mysql.h mysql/errmsg.h errmsg.h])
# Checks for typedefs, structures, and compiler characteristics.
#ifdef HAVE_PTHREAD_H
#include <pthread.h>
+#ifdef PTHREAD_MUTEX_RECURSIVE_NP
+#define PTHREAD_MUTEX_RECURSIVE_VAL PTHREAD_MUTEX_RECURSIVE_NP
+#else
+#define PTHREAD_MUTEX_RECURSIVE_VAL PTHREAD_MUTEX_RECURSIVE
+#endif
#define IOTHREAD_MUTEX_INIT(var) { \
pthread_mutexattr_t mutex_attr; \
pthread_mutexattr_init(&mutex_attr);\
- pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE_NP);\
+ pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE_VAL);\
pthread_mutex_init(&var, &mutex_attr); \
}
#define IOSYNCHRONIZE(var) pthread_mutex_lock(&var)
#ifdef HAVE_SYS_EVENT_H
#include <sys/event.h>
+#include <errno.h>
#define MAX_EVENTS 32
res = kevent(kevent_fd, changes, nchanges, NULL, 0, NULL);
if(res < 0)
iohandler_log(IOLOG_ERROR, "could not add IODescriptor %d to kevent queue. (returned: %d)", res);
- }
}
static void engine_kevent_remove(struct IODescriptor *iofd) {
static void engine_kevent_update(struct IODescriptor *iofd) {
if(iofd->type == IOTYPE_TIMER) return;
if(iofd->state == IO_CLOSED) {
- engine_epoll_remove(iofd);
+ engine_kevent_remove(iofd);
return;
}
struct kevent changes[2];
}
static void engine_kevent_loop(struct timeval *timeout) {
- struct kevent evts[MAX_EVENTS];
+ struct kevent events[MAX_EVENTS];
struct timeval now, tdiff;
- struct timespec ts, *ptr
+ struct timespec ts, *pts;
int msec;
- int events;
int kevent_result;
gettimeofday(&now, NULL);
}
//select system call
- kevent_result = kevent(kq_fd, NULL, 0, events, MAX_EVENTS, pts);
+ kevent_result = kevent(kevent_fd, NULL, 0, events, MAX_EVENTS, pts);
if (kevent_result < 0) {
if (errno != EINTR) {
} else {
int i;
for(i = 0; i < kevent_result; i++)
- iohandler_events(evts[i].udata, (evts[i].filter == EVFILT_READ), (evts[i].filter == EVFILT_WRITE));
+ iohandler_events(events[i].udata, (events[i].filter == EVFILT_READ), (events[i].filter == EVFILT_WRITE));
}
//check timers
event_registered(user, from);
user->flags &= ~USERFLAG_WAS_REGISTERING;
+ if(user->last_who > REWHO_TIMEOUT)
+ user->last_who -= REWHO_TIMEOUT;
event_join(chanuser);
} else if(!(chan->flags & CHANFLAG_RECEIVED_USERLIST)) {
int chanuser_count = getChanUserCount();
pkgpos += sprintf(pkgbuf + pkgpos, "%d %d\n", user_count, chanuser_count);
}
+ pkgpos += sprintf(pkgbuf + pkgpos, "%lu\n", getStartTime());
pkgbuf[pkgpos] = 0;
//send package
#ifndef WIN32
#include "main.h"
#include <mysql.h>
+#ifdef HAVE_MYSQL_ERRMSG_H
#include <mysql/errmsg.h>
+#elif defined(HAVE_ERRMSG_H)
+#include <errmsg.h>
+#endif
#define MYSQLMAXLEN 1024
#include <winsock2.h>
#include <malloc.h>
#else
+#ifdef HAVE_FEATURES_H
#include <features.h>
+#endif
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#else
#define pthread_self_tid() pthread_self()
#endif
+#ifdef PTHREAD_MUTEX_RECURSIVE_NP
+#define PTHREAD_MUTEX_RECURSIVE_VAL PTHREAD_MUTEX_RECURSIVE_NP
+#else
+#define PTHREAD_MUTEX_RECURSIVE_VAL PTHREAD_MUTEX_RECURSIVE
+#endif
#define THREAD_MUTEX_INIT(var) { \
pthread_mutexattr_t mutex_attr; \
pthread_mutexattr_init(&mutex_attr);\
- pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE_NP);\
+ pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE_VAL);\
pthread_mutex_init(&var, &mutex_attr); \
}
#define THREAD_MUTEX_INIT_TYPE(var, type) { \