summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Andreas Krennmair <ak@synflood.at> 2014-01-13 18:40:57 +0100
committerGravatar Andreas Krennmair <ak@synflood.at> 2014-01-13 23:08:27 +0100
commitd71336f48be10df737b811edc7796d6a9a88498e (patch)
tree7bfec4cd17adfe5855c6b57d1c0e1ecc0f705e3c
parent90ecce5b72e8d49d60731e9080c3d8fc417c4079 (diff)
downloadnewsboat-d71336f48be10df737b811edc7796d6a9a88498e.tar.gz
newsboat-d71336f48be10df737b811edc7796d6a9a88498e.tar.zst
newsboat-d71336f48be10df737b811edc7796d6a9a88498e.zip
fix hideous Perl mistake.
-rw-r--r--include/itemview_formaction.h5
-rw-r--r--include/rss.h1
-rw-r--r--src/itemview_formaction.cpp1
-rw-r--r--src/rss.cpp44
-rwxr-xr-xtxt2h.pl2
5 files changed, 34 insertions, 19 deletions
diff --git a/include/itemview_formaction.h b/include/itemview_formaction.h
index e7770b90..b845d152 100644
--- a/include/itemview_formaction.h
+++ b/include/itemview_formaction.h
@@ -16,7 +16,10 @@ class itemview_formaction : public formaction {
virtual ~itemview_formaction();
virtual void prepare();
virtual void init();
- inline void set_guid(const std::string& guid_) { guid = guid_; }
+ inline void set_guid(const std::string& guid_) {
+ LOG(LOG_DEBUG, "itemview_formaction::set_guid: new guid = %s", guid_.c_str());
+ guid = guid_;
+ }
inline void set_feed(std::tr1::shared_ptr<rss_feed> fd) { feed = fd; }
void set_highlightphrase(const std::string& text);
keymap_hint_entry * get_keymap_hint();
diff --git a/include/rss.h b/include/rss.h
index f4f0ccdb..e6f8527f 100644
--- a/include/rss.h
+++ b/include/rss.h
@@ -235,6 +235,7 @@ namespace newsbeuter {
unsigned int idx;
unsigned int order;
dl_status status_;
+ mutex items_guid_map_mutex;
};
class rss_ignores : public config_action_handler {
diff --git a/src/itemview_formaction.cpp b/src/itemview_formaction.cpp
index 5325f696..7d4818c6 100644
--- a/src/itemview_formaction.cpp
+++ b/src/itemview_formaction.cpp
@@ -61,6 +61,7 @@ void itemview_formaction::prepare() {
render_width -= 5;
}
+ LOG(LOG_DEBUG, "itemview_formaction::prepare: guid = %s", guid.c_str());
std::tr1::shared_ptr<rss_item> item = feed->get_item_by_guid(guid);
listformatter listfmt;
diff --git a/src/rss.cpp b/src/rss.cpp
index 883b8761..4fca5ef4 100644
--- a/src/rss.cpp
+++ b/src/rss.cpp
@@ -215,12 +215,17 @@ std::tr1::shared_ptr<rss_item> rss_feed::get_item_by_guid(const std::string& gui
}
std::tr1::shared_ptr<rss_item> rss_feed::get_item_by_guid_unlocked(const std::string& guid) {
- std::tr1::unordered_map<std::string, std::tr1::shared_ptr<rss_item> >::const_iterator it;
- if ((it = items_guid_map.find(guid)) != items_guid_map.end()) {
- return it->second;
+ LOG(LOG_DEBUG, "get_item_by_guid_unlocked: guid = %s", guid.c_str());
+ {
+ scope_mutex lock(&items_guid_map_mutex);
+ std::tr1::unordered_map<std::string, std::tr1::shared_ptr<rss_item> >::const_iterator it;
+ if ((it = items_guid_map.find(guid)) != items_guid_map.end()) {
+ return it->second;
+ }
+ LOG(LOG_DEBUG, "rss_feed::get_item_by_guid_unlocked: hit dummy item!");
+ LOG(LOG_DEBUG, "rss_feed::get_item_by_guid_unlocked: items_guid_map.size = %d", items_guid_map.size());
}
- LOG(LOG_DEBUG, "rss_feed::get_item_by_guid_unlocked: hit dummy item!");
- // abort();
+ abort();
return std::tr1::shared_ptr<rss_item>(new rss_item(ch)); // should never happen!
}
@@ -439,16 +444,19 @@ void rss_feed::update_items(std::vector<std::tr1::shared_ptr<rss_feed> > feeds)
matcher m(query);
items_.clear();
- items_guid_map.clear();
-
- for (std::vector<std::tr1::shared_ptr<rss_feed> >::iterator it=feeds.begin();it!=feeds.end();++it) {
- if ((*it)->rssurl().substr(0,6) != "query:") { // don't fetch items from other query feeds!
- for (std::vector<std::tr1::shared_ptr<rss_item> >::iterator jt=(*it)->items().begin();jt!=(*it)->items().end();++jt) {
- if (m.matches(jt->get())) {
- LOG(LOG_DEBUG, "rss_feed::update_items: matcher matches!");
- (*jt)->set_feedptr(*it);
- items_.push_back(*jt);
- items_guid_map[(*jt)->guid()] = *jt;
+ {
+ scope_mutex lock(&items_guid_map_mutex);
+ items_guid_map.clear();
+
+ for (std::vector<std::tr1::shared_ptr<rss_feed> >::iterator it=feeds.begin();it!=feeds.end();++it) {
+ if ((*it)->rssurl().substr(0,6) != "query:") { // don't fetch items from other query feeds!
+ for (std::vector<std::tr1::shared_ptr<rss_item> >::iterator jt=(*it)->items().begin();jt!=(*it)->items().end();++jt) {
+ if (m.matches(jt->get())) {
+ LOG(LOG_DEBUG, "rss_feed::update_items: matcher matches!");
+ (*jt)->set_feedptr(*it);
+ items_.push_back(*jt);
+ items_guid_map[(*jt)->guid()] = *jt;
+ }
}
}
}
@@ -577,7 +585,10 @@ void rss_feed::purge_deleted_items() {
std::vector<std::tr1::shared_ptr<rss_item> >::iterator it=items_.begin();
while (it!=items_.end()) {
if ((*it)->deleted()) {
- items_guid_map.erase((*it)->guid());
+ {
+ scope_mutex lock2(&items_guid_map_mutex);
+ items_guid_map.erase((*it)->guid());
+ }
items_.erase(it);
it = items_.begin(); // items_ modified -> iterator invalidated
} else {
@@ -619,5 +630,4 @@ void rss_feed::load() {
ch->fetch_descriptions(this);
}
-
}
diff --git a/txt2h.pl b/txt2h.pl
index 83343d8a..1ae0e4fe 100755
--- a/txt2h.pl
+++ b/txt2h.pl
@@ -3,7 +3,7 @@
use strict;
use File::Basename;
-if (length(@ARGV) < 1) {
+if (scalar(@ARGV) < 1) {
print STDOUT "usage: $0 <stflfile> [<extension>]\n";
exit(1);
}