fixed path of mysql/errmsg.h (OSX compilation fix)
[NeonServV5.git] / src / IRCQueue.c
index d68f098b0bd9fd64c2a8baeea93cd1051e2c3903..1c4997207aeb8736d506c218dfc2e651b24cc7b2 100644 (file)
@@ -1,4 +1,4 @@
-/* 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
@@ -45,6 +45,7 @@ static struct BotQueue *initialize_queue(struct ClientSocket *client) {
     }
     queue->client = client;
     client->queue = queue;
+    queue->iofd = NULL;
     queue->penalty = 0;
     queue->fastqueue_first = NULL;
     queue->fastqueue_last = NULL;
@@ -118,9 +119,13 @@ int queue_add(struct ClientSocket *client, char* msg, int len) {
         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));
@@ -241,9 +246,13 @@ static IOHANDLER_CALLBACK(queue_callback) {
         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;