{
HashPos *At;
+ pthread_mutex_lock(&RSSQueueMutex);
UnlinkRooms(Cfg);
At = GetNewHashPos(RSSFetchUrls, 0);
}
DeleteHashPos(&At);
last_run = time(NULL);
+ pthread_mutex_unlock(&RSSQueueMutex);
}
void DeleteRssCfg(void *vptr)
* Scan for rooms that have RSS client requests configured
*/
void rssclient_scan(void) {
+ int RSSRoomCount, RSSCount;
rss_aggregator *rptr = NULL;
void *vrptr = NULL;
HashPos *it;
/*
* 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
- * don't really require extremely fine granularity here, we'll do it
- * with a static variable instead.
+ * run is done at a time.
*/
+ pthread_mutex_lock(&RSSQueueMutex);
+ RSSCount = GetCount(RSSFetchUrls);
+ RSSRoomCount = GetCount(RSSQueueRooms);
+ pthread_mutex_unlock(&RSSQueueMutex);
- if ((GetCount(RSSQueueRooms) > 0) || (GetCount(RSSFetchUrls) > 0)) {
+ if ((RSSRoomCount > 0) || (RSSCount > 0)) {
syslog(LOG_DEBUG,
- "rssclient: concurrency check failed; %d rooms and %d url's are queued",
- GetCount(RSSQueueRooms),
- GetCount(RSSFetchUrls)
- );
+ "rssclient: concurrency check failed; %d rooms and %d url's are queued",
+ RSSRoomCount, RSSCount
+ );
return;
}