+ At = GetNewHashPos(RSSQueueRooms, 0);
+
+ if (GetHashPosFromKey(RSSQueueRooms, LKEY(QRnumber), 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);
+}
+
+void UnlinkRooms(rss_aggregator *Cfg)
+{
+ DeleteRoomReference(Cfg->QRnumber);
+ if (Cfg->OtherQRnumbers != NULL)
+ {
+ long HKLen;
+ const char *HK;
+ HashPos *At;
+ void *vData;
+
+ At = GetNewHashPos(Cfg->OtherQRnumbers, 0);
+ while (! server_shutting_down &&
+ GetNextHashPos(Cfg->OtherQRnumbers,
+ At,
+ &HKLen, &HK,
+ &vData) &&
+ (vData != NULL))
+ {
+ long *lData = (long*) vData;
+ DeleteRoomReference(*lData);
+ }
+
+ DeleteHashPos(&At);
+ }
+}
+
+void UnlinkRSSAggregator(rss_aggregator *Cfg)
+{
+ HashPos *At;
+
+ UnlinkRooms(Cfg);
+
+ At = GetNewHashPos(RSSFetchUrls, 0);
+ if (GetHashPosFromKey(RSSFetchUrls, SKEY(Cfg->Url), At))
+ {
+ DeleteEntryFromHash(RSSFetchUrls, At);
+ }
+ DeleteHashPos(&At);
+ last_run = time(NULL);
+}
+
+void FreeNetworkSaveMessage (void *vMsg)
+{
+ networker_save_message *Msg = (networker_save_message *) vMsg;
+
+ CtdlFreeMessageContents(&Msg->Msg);
+ FreeStrBuf(&Msg->Message);
+ FreeStrBuf(&Msg->MsgGUID);
+ free(Msg);