X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2FIRCQueue.c;h=296850d076d102cf885bc8a338e9f7ef693882ba;hb=88751acefe20e568fc945d7e5f5c11e0a9c7be60;hp=d68f098b0bd9fd64c2a8baeea93cd1051e2c3903;hpb=f28a6cf114ec097583236a82aab0dbf52c4852c4;p=NeonServV5.git diff --git a/src/IRCQueue.c b/src/IRCQueue.c index d68f098..296850d 100644 --- a/src/IRCQueue.c +++ b/src/IRCQueue.c @@ -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 @@ -17,6 +17,7 @@ #include "IRCQueue.h" #include "ClientSocket.h" #include "IOHandler.h" +#include "tools.h" #define MAXPENALTY 8 /* 4 messages */ @@ -45,6 +46,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 +120,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 +247,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;