HashList *RSSFetchUrls = NULL; /* -> rss_aggregator; ->RefCount access to be locked too. */
eNextState RSSAggregatorTerminate(AsyncIO *IO);
-
+eNextState RSSAggregatorShutdownAbort(AsyncIO *IO);
struct CitContext rss_CC;
struct rssnetcfg *rnclist = NULL;
At = GetNewHashPos(RSSQueueRooms, 0);
- GetHashPosFromKey(RSSQueueRooms, LKEY(QRnumber), At);
- GetHashPos(RSSQueueRooms, At, &HKLen, &HK, &vData);
- if (vData != NULL)
+ if (GetHashPosFromKey(RSSQueueRooms, LKEY(QRnumber), At))
{
- pRoomC = (rss_room_counter *) vData;
- pRoomC->count --;
- if (pRoomC->count == 0)
- DeleteEntryFromHash(RSSQueueRooms, At);
+ GetHashPos(RSSQueueRooms, At, &HKLen, &HK, &vData);
+ if (vData != NULL)
+ {
+ pRoomC = (rss_room_counter *) vData;
+ pRoomC->count --;
+ if (pRoomC->count == 0)
+ DeleteEntryFromHash(RSSQueueRooms, At);
+ }
}
DeleteHashPos(&At);
}
UnlinkRooms(Cfg);
At = GetNewHashPos(RSSFetchUrls, 0);
- if (GetHashPosFromKey(RSSFetchUrls, SKEY(Cfg->Url), At) == 0)
+ if (GetHashPosFromKey(RSSFetchUrls, SKEY(Cfg->Url), At))
{
DeleteEntryFromHash(RSSFetchUrls, At);
}
IO->CitContext = CloneContext(&rss_CC);
IO->Data = Cfg;
+ safestrncpy(((CitContext*)IO->CitContext)->cs_host,
+ ChrPtr(Cfg->Url),
+ sizeof(((CitContext*)IO->CitContext)->cs_host));
syslog(LOG_DEBUG, "Fetching RSS feed <%s>\n", ChrPtr(Cfg->Url));
ParseURL(&IO->ConnectMe, Cfg->Url, 80);
NULL,
"Citadel RSS Client",
ParseRSSReply,
- RSSAggregatorTerminate))
+ RSSAggregatorTerminate,
+ RSSAggregatorShutdownAbort))
{
syslog(LOG_DEBUG, "Unable to initialize libcurl.\n");
return 0;
EVM_syslog(LOG_DEBUG, "RSS: Terminating.\n");
+ UnlinkRSSAggregator(rncptr);
+ return eAbort;
+}
+eNextState RSSAggregatorShutdownAbort(AsyncIO *IO)
+{
+ const char *pUrl;
+ rss_aggregator *rncptr = (rss_aggregator *)IO->Data;
+
+ pUrl = IO->ConnectMe->PlainUrl;
+ if (pUrl == NULL)
+ pUrl = "";
+
+ EV_syslog(LOG_DEBUG, "RSS: Aborting by shutdown: %s.\n", pUrl);
+
+
UnlinkRSSAggregator(rncptr);
return eAbort;
}