X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=blobdiff_plain;f=src%2FIRCQueue.c;h=a7cc1a4d00fd52521ba0cc108a3db83c9dbf0d69;hp=d68f098b0bd9fd64c2a8baeea93cd1051e2c3903;hb=HEAD;hpb=02e797baca7f15e306d70b3b7e2b4d83ff1cf44f diff --git a/src/IRCQueue.c b/src/IRCQueue.c index d68f098..a7cc1a4 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,8 @@ #include "IRCQueue.h" #include "ClientSocket.h" #include "IOHandler.h" +#include "tools.h" +#include "log.h" #define MAXPENALTY 8 /* 4 messages */ @@ -40,11 +42,12 @@ static IOHANDLER_CALLBACK(queue_callback); static struct BotQueue *initialize_queue(struct ClientSocket *client) { struct BotQueue *queue = malloc(sizeof(*queue)); if (!queue) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } queue->client = client; client->queue = queue; + queue->iofd = NULL; queue->penalty = 0; queue->fastqueue_first = NULL; queue->fastqueue_last = NULL; @@ -118,14 +121,18 @@ 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)); if (!entry) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return 0; } entry->msg = strdup(msg); @@ -241,9 +248,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;