fixed IRCQueue.c crash (added missing pointer to the queue structure)
authorpk910 <philipp@zoelle1.de>
Wed, 22 Aug 2012 02:29:04 +0000 (04:29 +0200)
committerpk910 <philipp@zoelle1.de>
Wed, 22 Aug 2012 02:45:05 +0000 (04:45 +0200)
src/IRCQueue.c

index d68f098b0bd9fd64c2a8baeea93cd1051e2c3903..673adff27b2e6884943cdd1bd2522d078aa116d8 100644 (file)
@@ -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;