#define TMP_SHORTER_URL_OFFSET 0xFE
#define TMP_SHORTER_URLS 0xFD
+time_t last_run = 0L;
+
pthread_mutex_t RSSQueueMutex; /* locks the access to the following vars: */
HashList *RSSQueueRooms = NULL; /* rss_room_counter */
HashList *RSSFetchUrls = NULL; /* -> rss_aggregator; ->RefCount access to be locked too. */
eNextState RSSAggregatorTerminate(AsyncIO *IO);
+struct CitContext rss_CC;
struct rssnetcfg *rnclist = NULL;
void AppendLink(StrBuf *Message, StrBuf *link, StrBuf *LinkTitle, const char *Title)
}
/*
if (server_shutting_down)
- break; /* TODO */
+ break; / * TODO */
DeleteHashPos(&At);
}
DeleteEntryFromHash(RSSFetchUrls, At);
}
DeleteHashPos(&At);
+ last_run = time(NULL);
}
eNextState FreeNetworkSaveMessage (AsyncIO *IO)
FreeStrBuf(&Ctx->Message);
FreeStrBuf(&Ctx->MsgGUID);
free(Ctx);
+ last_run = time(NULL);
return eAbort;
}
Ctx->Cfg = Cfg;
Ctx->recp = recp;
Ctx->IO.Data = Ctx;
- Ctx->IO.CitContext = CloneContext(CC);
+ Ctx->IO.CitContext = CloneContext(&rss_CC);
Ctx->IO.Terminate = FreeNetworkSaveMessage;
Ctx->IO.ShutdownAbort = AbortNetworkSaveMessage;
QueueDBOperation(&Ctx->IO, RSS_FetchNetworkUsetableEntry);
memset(ri, 0, sizeof(rss_item));
Cfg->Item = ri;
IO = &Cfg->IO;
- IO->CitContext = CloneContext(CC);
+ IO->CitContext = CloneContext(&rss_CC);
IO->Data = Cfg;
FreeStrBuf(&rncptr->rooms);
FreeStrBuf(&rncptr->CData);
FreeStrBuf(&rncptr->Key);
-
+ FreeStrBuf(&rncptr->IO.HttpReq.ReplyData);
DeleteHash(&rncptr->OtherQRnumbers);
+ FreeURL(&rncptr->IO.ConnectMe);
if (rncptr->Item != NULL)
{
eNextState RSSAggregatorTerminate(AsyncIO *IO)
{
rss_aggregator *rncptr = (rss_aggregator *)IO->Data;
- HashPos *At;
- long HKLen;
- const char *HK;
- void *vData;
-
+ /*
+ HashPos *At;
+ long HKLen;
+ const char *HK;
+ void *vData;
+ */
pthread_mutex_lock(&RSSQueueMutex);
rncptr->RefCount --;
if (rncptr->RefCount == 0)
*/
void rssclient_scan_room(struct ctdlroom *qrbuf, void *data)
{
- StrBuf *CfgData;
+ StrBuf *CfgData=NULL;
StrBuf *CfgType;
StrBuf *Line;
rss_room_counter *Count = NULL;
}
if (server_shutting_down)
- return
+ return;
+
+ if (fstat(fd, &statbuf) == -1) {
+ syslog(LOG_DEBUG, "ERROR: could not stat configfile '%s' - %s\n",
+ filename, strerror(errno));
+ return;
+ }
+
+ if (server_shutting_down)
+ return;
CfgData = NewStrBufPlain(NULL, statbuf.st_size + 1);
+
if (StrBufReadBLOB(CfgData, &fd, 1, statbuf.st_size, &Err) < 0) {
close(fd);
FreeStrBuf(&CfgData);
use_this_rncptr->roomlist_parts++;
}
pthread_mutex_unlock(&RSSQueueMutex);
+
+
+ FreeStrBuf(&rncptr->Url);
+ free(rncptr);
+ rncptr = NULL;
continue;
}
pthread_mutex_unlock(&RSSQueueMutex);
long len;
const char *Key;
- /* Run no more than once every 15 minutes. * /
+ /* Run no more than once every 15 minutes. */
if ((time(NULL) - last_run) < 900) {
return;
}
-*/
+
/*
* This is a simple concurrency check to make sure only one rssclient run
* is done at a time. We could do this with a mutex, but since we
{
if (threading)
{
+ CtdlFillSystemContext(&rss_CC, "rssclient");
pthread_mutex_init(&RSSQueueMutex, NULL);
RSSQueueRooms = NewHash(1, lFlathash);
RSSFetchUrls = NewHash(1, NULL);