+ DeleteHashPos(&At);
+ }
+}
+
+void UnlinkRSSAggregator(rss_aggregator *RSSAggr)
+{
+ HashPos *At;
+
+ pthread_mutex_lock(&RSSQueueMutex);
+ UnlinkRooms(RSSAggr);
+
+ At = GetNewHashPos(RSSFetchUrls, 0);
+ if (GetHashPosFromKey(RSSFetchUrls, SKEY(RSSAggr->Url), At))
+ {
+ DeleteEntryFromHash(RSSFetchUrls, At);
+ }
+ DeleteHashPos(&At);
+ last_run = time(NULL);
+ pthread_mutex_unlock(&RSSQueueMutex);
+}
+
+void DeleteRssCfg(void *vptr)
+{
+ rss_aggregator *RSSAggr = (rss_aggregator *)vptr;
+ AsyncIO *IO = &RSSAggr->IO;
+ EVRSSCM_syslog(LOG_DEBUG, "RSS: destroying\n");
+
+ FreeStrBuf(&RSSAggr->Url);
+ FreeStrBuf(&RSSAggr->rooms);
+ FreeStrBuf(&RSSAggr->CData);
+ FreeStrBuf(&RSSAggr->Key);
+ DeleteHash(&RSSAggr->OtherQRnumbers);
+
+ DeleteHashPos (&RSSAggr->Pos);
+ DeleteHash (&RSSAggr->Messages);
+ if (RSSAggr->recp.recp_room != NULL)
+ free(RSSAggr->recp.recp_room);
+
+
+ if (RSSAggr->Item != NULL)
+ {
+ flush_rss_item(RSSAggr->Item);
+
+ free(RSSAggr->Item);
+ }
+
+ FreeAsyncIOContents(&RSSAggr->IO);
+ memset(RSSAggr, 0, sizeof(rss_aggregator));
+ free(RSSAggr);
+}
+
+eNextState RSSAggregator_Terminate(AsyncIO *IO)
+{
+ rss_aggregator *RSSAggr = (rss_aggregator *)IO->Data;
+
+ EVRSSCM_syslog(LOG_DEBUG, "RSS: Terminating.\n");
+
+ StopCurlWatchers(IO);
+ UnlinkRSSAggregator(RSSAggr);