-/* IRCQueue.c - NeonServ v5.5
+/* IRCQueue.c - NeonServ v5.6
* Copyright (C) 2011-2012 Philipp Kreil (pk910)
*
* This program is free software: you can redistribute it and/or modify
}
queue->client = client;
client->queue = queue;
+ queue->iofd = NULL;
queue->penalty = 0;
queue->fastqueue_first = NULL;
queue->fastqueue_last = NULL;
if(!queue->iofd) {
struct timeval timeout;
gettimeofday(&timeout, NULL);
- queue->rem_penalty = (MAXPENALTY - queue->penalty) + 1;
+ if(queue->penalty >= MAXPENALTY)
+ queue->rem_penalty = (queue->penalty - MAXPENALTY)+1;
+ else
+ queue->rem_penalty = queue->penalty;
timeout.tv_sec += queue->rem_penalty;
queue->iofd = iohandler_timer(timeout, queue_callback);
+ queue->iofd->data = queue;
}
} else {
struct QueueEntry *entry = malloc(sizeof(*entry));
if(queue->penalty > 0) {
struct timeval timeout;
gettimeofday(&timeout, NULL);
- queue->rem_penalty = (MAXPENALTY - queue->penalty) + 1;
+ if(queue->penalty >= MAXPENALTY)
+ queue->rem_penalty = (queue->penalty - MAXPENALTY)+1;
+ else
+ queue->rem_penalty = queue->penalty;
timeout.tv_sec += queue->rem_penalty;
queue->iofd = iohandler_timer(timeout, queue_callback);
+ queue->iofd->data = queue;
} else {
queue->iofd = NULL;
queue->penalty = 0;