skeeto / elfeed

An Emacs web feeds client
The Unlicense
1.51k stars 118 forks source link

Odd number of elements in hashtable data on emacs close #13

Closed exu closed 11 years ago

exu commented 11 years ago

In emacs 24.3 and in emacs snapshot

Debugger entered--Lisp error: (error "Odd number of elements in hashtable data")
  read(#<buffer index>)
  (setq elfeed-db (read (current-buffer)))
  (save-current-buffer (set-buffer (find-file-noselect index)) (goto-char (point-min)) (setq elfeed-db (read (current-buffer))) (kill-buffer))
  (if (not (file-exists-p index)) (let ((db (setq elfeed-db (list :version elfeed-db-version)))) (plist-put db :feeds (make-hash-table :test (quote equal))) (plist-put db :entries (make-hash-table :test (quote equal))) (plist-put db :index (let ((cmpfun (function elfeed-db-compare))) (progn (vector (quote cl-struct-avl-tree-) (progn (vector nil nil nil 0)) (function elfeed-db-compare)))))) (save-current-buffer (set-buffer (find-file-noselect index)) (goto-char (point-min)) (setq elfeed-db (read (current-buffer))) (kill-buffer)))
  (let ((index (expand-file-name "index" elfeed-db-directory))) (if (not (file-exists-p index)) (let ((db (setq elfeed-db (list :version elfeed-db-version)))) (plist-put db :feeds (make-hash-table :test (quote equal))) (plist-put db :entries (make-hash-table :test (quote equal))) (plist-put db :index (let ((cmpfun (function elfeed-db-compare))) (progn (vector (quote cl-struct-avl-tree-) (progn ...) (function elfeed-db-compare)))))) (save-current-buffer (set-buffer (find-file-noselect index)) (goto-char (point-min)) (setq elfeed-db (read (current-buffer))) (kill-buffer))) (progn (setq elfeed-db-feeds (plist-get elfeed-db :feeds)) (setq elfeed-db-entries (plist-get elfeed-db :entries)) (setq elfeed-db-index (plist-get elfeed-db :index)) (progn (or (and (memq (aref elfeed-db-index 0) cl-struct-avl-tree--tags)) (error "%s accessing a non-%s" (quote avl-tree--cmpfun) (quote avl-tree-))) (let* ((v elfeed-db-index)) (aset v 2 (function elfeed-db-compare))))))
  elfeed-db-load()
  (progn (elfeed-db-load))
  (if (null elfeed-db) (progn (elfeed-db-load)))
  elfeed-db-ensure()
  elfeed-db-save()
  kill-emacs()
  save-buffers-kill-emacs()
  handle-delete-frame((delete-frame (#<frame *scratch* 0x119b7a0>)))
  dframe-handle-delete-frame((delete-frame (#<frame *scratch* 0x119b7a0>)))
  call-interactively(dframe-handle-delete-frame nil [(delete-frame (#<frame *scratch* 0x119b7a0>))])
kmicu commented 11 years ago

You should post your elfeed related config.

exu commented 11 years ago

It's big :)

(require 'elfeed)
(global-set-key (kbd "C-x w") 'elfeed)

;; word wrap
(add-hook 'elfeed-show-mode-hook 'visual-line-mode)

;; default search filter on elfeed start without spam
(setq elfeed-search-filter "@1-week-ago -spam +unread")

;; RSS Atom Feeds
(setq elfeed-feeds
      (quote
       (
        "http://www.infopraca.pl/jobseeker/search.php?rss=Live&Keywords=php&Category=&SubRegion=15"
        "http://www.pracuj.pl/OFERTYPRACY/rss.aspx?SE=1&KW=PHP&H=20FB4A85E44401974EC026DEFBD7DB8B&R=15&C=3000014,3000015,3000018&EID=0&RCT=0&FP=%22php%22"
        "http://www.phpdeveloper.org/phpdev.rdf"
        "http://everzet.com/rss"
        "http://we-love-php.blogspot.com/feeds/posts/default"
        "http://www.dzone.com/links/feed/frontpage/php/rss.xml"
        "http://feeds.feedburner.com/symfony/blog"
        "http://feeds.feedburner.com/nelmio"
        "http://feeds.feedburner.com/Inchoo"
        "http://bredemeyer.com/RequisiteVariety/?feed=rss2"
        "http://blog.sei.cmu.edu/feeds/rss.cfm"
        "http://sketchnotearmy.com/blog/atom.xml"
        "http://feeds.apigee.com/ApigeeBlog"
        "http://feeds.feedburner.com/UdiDahan-TheSoftwareSimplist"
        "http://blogs.pmi.org/blog/voices_on_project_management/atom.xml"
        "http://www.thepassionateprojectmanager.com/feed/"
        "http://www.projectcomplete.pl/blog/rss"
        "http://feeds.feedburner.com/thecriticalpath/DyPm"
        "http://feeds.feedburner.com/agilecommons/commonsblog"
        "http://feeds.feedburner.com/ajaxian"
        "http://planet.emacsen.org/atom.xml"
        "http://whattheemacsd.com/atom.xml"
        "http://vickychijwani.github.com/rss.xml"
        "http://wikigames.ubuntu.pl/?q=rss.xml"
        "http://feeds.feedburner.com/BlogOLinuxUbuntu"
        "http://distrowatch.com/news/dw.xml"
        "http://www.linuxinsider.com/perl/syndication/rssfull.pl"
        "http://www.linux.com/feeds/all-content"
        "http://www.tuxradar.com/frontpage/feed"
        "http://feeds.feedburner.com/Linux_User"
        "http://feeds.cyberciti.biz/Nixcraft-LinuxFreebsdSolarisTipsTricks"
        "http://jakilinux.org/feed/"
        "http://www.archlinux.org/feeds/news/"
        "http://jakilinux.org/category/newsy/feed/"
        "http://www.dzone.com/links/feed/frontpage/unix-linux/rss.xml"
        "http://rss.7thguard.net/7thguard.xml"
        "http://www.linux.pl/rss.php"
        "http://fullcirclemagazine.org/feed/"
        "http://www.howtoforge.com/node/feed"
        "http://www.markshuttleworth.com/feed"
        "http://www.ubuntugeek.com/feed/"
        "http://feeds.feedburner.com/ubuntu-czytelnia"
        "http://hacking.pl/rss.xml"
        "http://freeworld.thc.org/rss.xml.php"
        "http://theinvisiblethings.blogspot.com/feeds/posts/default?alt=rss"
        "http://feeds.feedburner.com/HCSL"
        "http://feeds.feedburner.com/niebezpiecznik"
        "http://securityweb.org/feed/"
        "http://vizzdoom.net/feed/"
        "http://secunia.com/blog_rss/o.rss"
        "http://www.zone-h.org/index2.php?option=com_rss&no_html=1"
        "http://feeds.feedburner.com/Hackosis"
        "http://www.networkworld.com/rss/security.xml"
        "http://sekurak.pl/feed/"
        "http://php-security.org/feed/"
        "http://feedproxy.google.com/piko"
        "http://feeds.feedburner.com/KrebsOnSecurity"
        "http://feeds.feedburner.com/gnucitizen"
        "http://www.cert.pl/rss_feed.xml"
        "http://ha.ckers.org/blog/feed/"
        "http://xssed.com/news.rss"
        "http://kopalniawiedzy.pl/wiadomosci.rss"
        "http://minds.pl/index2.php?option=ds-syndicate&version=1&feed_id=1"
        "http://www.geekweek.pl/feed/"
        "http://kasia-gotuje.pl/rss"
        "http://www.poznan.pl/mim/public/feeds/rss.xml?name=msp"
        "http://vimeo.com/channels/142981/videos/rss"
        "http://howtonode.org/feed.xml"
        "http://www.dzone.com/links/feed/search/nodejs/rss.xml"
        "http://feeds.feedburner.com/nodejs/123123123"
        "http://nodetuts.com/rss.xml"
        "http://tjholowaychuk.com/rss"
        "http://feeds.feedburner.com/RubyQuicktips"
        "http://www.scala-lang.org/rss.xml"
        "http://feeds.feedburner.com/thechangelog"
        "http://www.ruby-lang.org/en/feeds/news.rss"
        "http://feeds.feedburner.com/RubyInside"
        "http://feeds.feedburner.com/rubyshow"
        "http://ajaxian.com/index.xml"
        "http://feeds.feedburner.com/GiantRobotsSmashingIntoOtherGiantRobots"
        "http://www.engineyard.com/blog/feed/"
        "http://feedproxy.google.com/TheRailsWay"
        "http://www.dzone.com/feed/frontpage/ruby/rss.xml"
        "http://www.dzone.com/links/feed/frontpage/python/rss.xml"
        "http://www.planetscala.com/atom.xml"
        "http://www.wykop.pl/rss/index.xml"
        "http://feeds.feedburner.com/GeekAndPoke"
        "http://xkcd.com/rss.xml"
        "http://www.joemonster.org/backend.php"
        "http://www.zuchrysuje.pl/index.php/feed/"
        "http://boli.blog.pl/index.rss"
        "http://bash.org.pl/rss"
        "http://zuch.blox.pl/rss2"
        "http://web20.pl/?feed=rss2"
        "http://pl.engadget.com/rss.xml"
        "http://feeds.feedburner.com/GoogleOperatingSystem"
        "http://www.webhosting.pl/feed/rss/all"
        "http://feeds.cybernetnews.com/CyberNet"
        "http://blogs.msdn.com/ie/atom.xml"
        "http://www.dzone.com/links/feed/frontpage/web%20design/rss.xml"
        "http://yehudakatz.com/feed/"
        "http://weierophinney.net/matthew/feeds/index.rss2"
        "http://feeds.feedburner.com/catonmat"
        "http://tirania.org/blog/miguel.rss2"
        "http://blog.ekini.net/feed/"
        "http://feeds.feedburner.com/SubbuDotOrg"
        "http://feeds.feedburner.com/railstips"
        "http://feeds.feedburner.com/VivekHaldar"
        "http://blog.qcadoo.com/tech/feed/"
        "http://blogs.msdn.com/b/interoperability/rss.aspx"
        "http://feeds2.feedburner.com/allTrades"
        "http://feeds.feedburner.com/Gimptutorials"
        "http://feeds.feedburner.com/nettuts"
        "http://martinfowler.com/feed.atom"
        "http://rss1.smashingmagazine.com/feed/?f=coding-std"
        "http://feeds.feedburner.com/devblogi"
        "http://feeds.feedburner.com/RidingRails"
        "http://feeds.feedburner.com/railscasts"
        "http://www.joezimjs.com/feed/"
        "http://asciicasts.com/episodes.xml"
        "http://feeds.feedburner.com/screencastsorg"
        "http://feeds.feedburner.com/InvisibleToTheEye"
        "http://feeds.feedburner.com/lococast"
        "http://blog.martinfjordvald.com/feed/"
        "http://feeds.feedburner.com/PostgresOnlineJournal"
        "http://www.awwwards.com/feed"
        "http://feeds.feedburner.com/CssTricks"
        "http://feeds.feedburner.com/WebReflection"
        "http://feeds.feedburner.com/TutorialShock"

        "http://mojeneony.blogspot.com/feeds/posts/default"
        "http://symfony2tips.blogspot.com/feeds/posts/default"
        "http://jackcoughonsoftware.blogspot.com/feeds/posts/default"
        "http://gojko.net/feed/"
        )))

;; tagging new feeds
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :before "2 weeks ago"
                                                     :remove 'unread))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "pracuj" :add '(work)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "praca" :add '(work)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "php" :add '(dev php)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "everzet" :add '(dev php)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "symfony/blog" :add '(dev php)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "nelmio" :add '(dev php)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "Inchoo" :add '(dev php)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "RecessFramework" :add '(dev php)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "bredemeyer" :add '(architecture)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "blog\\.sei\\.cmu\\.edu" :add '(architecture)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "sketchnotearmy\\.com" :add '(architecture)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "feeds\\.apigee\\.com" :add '(architecture)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "UdiDahan-TheSoftwareSimplist" :add '(architecture)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "blogs\\.pmi\\.org" :add '(pm)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "thepassionateprojectmanager" :add '(pm)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "projectcomplete" :add '(pm)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "thecriticalpath/DyPm" :add '(pm)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "agilecommons/commonsblog" :add '(pm)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "ajaxian" :add '(dev js)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "BrandonAaron" :add '(dev js)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "planet\\.emacsen\\.org" :add '(dev workflow)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "whattheemacsd" :add '(dev workflow)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "vickychijwani" :add '(dev workflow)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "linux" :add '(os linux)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "ubuntu" :add '(os linux ubuntu)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "Linux" :add '(os linux)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "distrowatch" :add '(os linux)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "tuxradar" :add '(os linux)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "unix" :add '(os linux)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "fullcirclemagazine" :add '(os linux)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "howtoforge" :add '(os linux)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "markshuttleworth" :add '(os linux)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "hacking" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "security" :add '(security)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "freeworld" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "theinvisiblethings" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "HCSL" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "niebezpiecznik" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "securityweb" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "anonops" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "vizzdoom" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "secunia" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "zone-h" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "Hackosis" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "sekurak" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "piko" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "Security" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "gnucitizen" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "cert\\.pl" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "ha\\.ckers\\.org" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "xssed" :add '(security)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "kopalniawiedzy" :add '(news spam knowledge)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "minds\\.pl" :add '(news spam knowledge)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "geekweek" :add '(news spam)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "kasia-gotuje" :add '(news food)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "poznan" :add '(news spam local)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "node" :add '(dev nodejs)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "nodejs" :add '(dev nodejs)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "channels/142981" :add '(dev nodejs)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "tjholowaychuk" :add '(dev nodejs)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "ruby" :add '(dev ruby)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "scala" :add '(dev scala)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "python" :add '(dev python)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "java" :add '(dev java)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "thechangelog" :add '(dev ruby)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "ajaxian" :add '(dev ruby)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "GiantRobots" :add '(dev ruby)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "engineyard" :add '(dev ruby)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "TheRailsWay" :add '(dev ruby)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "blogs\\.msdn\\.com" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "web%20design" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "yehudakatz" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "weierophinney" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "catonmat" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "tirania" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "blog" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "SubbuDotOrg" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "railstips" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "VivekHaldar" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "blog\\.qcadoo\\.com" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "interoperability" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "allTrades" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "Gimptutorials" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "nettuts" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "martinfowler\\.com/feed\\.atom" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "smashingmagazine" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "devblogi" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "RidingRails" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "railscasts" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "joezimjs" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "asciicasts" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "screencastsorg" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "InvisibleToTheEye" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "lococast" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "martinfjordvald" :add '(dev common)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "PostgresOnlineJournal" :add '(dev common)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "awwwards" :add '(dev clientside)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "CssTricks" :add '(dev clientside)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "WebReflection" :add '(dev clientside)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "TutorialShock" :add '(dev clientside)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "wykop" :add '(entertainment spam)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "GeekAndPoke" :add '(fun spam)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "xkcd" :add '(fun spam)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "joemonster" :add '(fun spam)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "zuchrysuje" :add '(fun spam)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "boli" :add '(fun spam)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "bash" :add '(fun spam)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "zuch" :add '(fun spam)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "web20" :add '(it-news spam)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "engadget" :add '(it-news spam)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "GoogleOperatingSystem" :add '(it-news)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "webhosting" :add '(it-news spam)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "cybernetnews" :add '(it-news spam)))

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "mojeneony" :add '(other spam)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "symfony2tips" :add '(other spam)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "jackcoughonsoftware" :add '(other spam)))
kmicu commented 11 years ago

Can you run elfeed without taggers and after that also with minimal number of feeds? My guess is this is a problem with some tagger.

BTW Instead of:

(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "niebezpiecznik" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "securityweb" :add '(security)))
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "anonops" :add '(security)))
...

You can use OR in regexp.

(add-hook 'elfeed-new-entry-hook 
  (elfeed-make-tagger :feed-url "niebezpiecznik\\|securityweb\\|anonops" :add '(security)))

I hope it is not related to your word wrap x] (add-hook 'elfeed-show-mode-hook 'visual-line-mode)

skeeto commented 11 years ago

This isn't a tagger issue, this is a bug in Emacs. It's corrupted your Elfeed database index. You can either delete your ~/.elfeed/index file (which will wipe your database), or you could attempt to manually repair it, which shouldn't be very difficult (explained below). I should probably add some code to detect this Emacs bug and attempt to repair the database automatically when it crops up.

The problem is the Emacs printer is printing incomplete hash tables. I was running into this frequently during early development but never figured out how to reproduce it reliably. I suspect it's due to a race condition, the chances of which go up significantly with all this asynchronous feed fetching (e.g. the database was written out during feed updates).

Quick overview: Emacs 23 introduced a printable (though ugly) hash table representation. Stripping it down to the bare essentials it looks like this.

#s(hash-table data (:a 1 :b 2 :c 3))

(gethash :a #s(hash-table data (:a 1 :b 2 :c 3)))
;; => 1

The content after the hash-table symbol is a property list. There's a data property with another property list as its value, listing off the key-value pairs of the hash table. If there's an odd number of key-value items, the reader signals an error.

;; Removing the value for :c
#s(hash-table data (:a 1 :b 2 :c))
;; => (error "Odd number of elements in hashtable data")

The content of ~/.elfeed/index is a single s-expression: a property list. This p-list has two hash tables, at least one of which was printed improperly for you. Try removing the final data p-list item (might just be a nil?) and running Elfeed again.

This is actually the second printed hash table bug I ran into with Elfeed.

exu commented 11 years ago

Thanks for the comprehensive answer, I'll try to repair my index file next time, by now removing it is enough for me. This problem is common in recent version of emacs, I've had it in projectile too (removing data file helps there too).

Thanks, and closing.

RafalBabinicz commented 10 years ago

I'm on a latest emacs-bzr - compiled week ago (version: GNU Emacs 24.3.50.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.10.6) of 2014-01-27), but today I can report instance of "Odd number of elements in hashtable data" bug.

I have a backup with compressed elfeed db and this is not a problem for me, but I have some remarks:

Use case:

Debugger entered--Lisp error: (error "Odd number of elements in hashtable data")
  read(#<buffer index>)
  elfeed-db-load()
  elfeed-db-ensure()
  elfeed-db-last-update()
  elfeed-search-update()
  elfeed()
  call-interactively(elfeed nil nil)
  command-execute(elfeed)

Related files with bug: Data ~ 16MiB index ~ 408 KiB

Related files from my backup: Data ~ 16MiB index ~ 21.8 MiB

buggy index (interesting parts):

(:version "0.0.2" :feeds #s(hash-table size 1642 test equal rehash-size 1.5 rehash-threshold 0.8 data 

...

[cl-struct-elfeed-ref "8c88947632c2fadc0cdf2cd0e6f03887577f1298"] html nil nil "http://someurl.com/rss" ...] ...)) :index [cl-struct-avl-tree- [[[[[[[[[[[[[[[[[[[nil nil ... 0] [nil nil ... 0] ... 0] [[nil nil ... 0] [nil nil ... 0] ... 0] ... 0] [[nil nil ... 0] [nil nil ... 0] ... 0] ... -1] [[[[nil nil ... 0] [nil nil ... 0] ... 0] [[nil nil ... 0] [nil nil ... 0] ... 0] ... 0] [[[nil nil ... 0] [nil nil ... 0] ... 0] [[nil nil ... 0] [nil nil ... 0] ... 0] ... 0] ... 0] ... 0] [[[[nil nil ... 0] [nil nil ... 0] ... 0] [[nil nil ... 0] [nil nil ... 0] ... 0] ... 0] [[[nil nil ... 0] [nil nil ... 0] ... 0] [[nil nil ... 0] [nil nil ... 0] ... 0] ... 0] ... 0] ... -1] [[[[[[nil nil ... 0] [nil nil ... 0] ... 0] [[nil nil ... 0] [nil nil ... 0] ... 0] ... 0] [[[nil nil ... 0] [nil nil ... 0] ... 0] [[ni

...

 [[nil nil ... 0] nil ... -1] ... 1] [[nil nil ... 0] [[nil nil ... 0] [nil nil ... 0] ... 0] ... 1] ... 0] [[[[nil nil ... 0] nil ... -1] [[nil nil ... 0] [nil nil ... 0] ... 0] ... 0] [[[nil nil ... 0] nil ... -1] [[nil nil ... 0] nil ... -1] ... 0] ... 0] ... 0] ... 0] ... 0] [[[[[[nil nil ... 0] [nil nil ... 0] ... 0] [nil nil ... 0] ... -1] [[[nil nil ... 0] nil ... -1] [[nil nil ... 0] [nil nil ... 0] ... 0] ... 0] ... 0] [[[[nil nil ... 0] [nil nil ... 0] ... 0] [nil [nil nil ... 0] ... 1] ... 0] [nil [nil nil ... 0] ... 1] ... -1] ... 0] [[[nil [nil nil ... 0] ... 1] [[nil nil ... 0] [nil nil ... 0] ... 0] ... 0] [[[[nil nil ... 0] nil ... -1] [nil nil ... 0] ... -1] [[nil [nil nil ... 0] ... 1] [nil nil ... 0] ... -1] ... 0] ... 1] ... 0] ... -1] ... 0] ... 0] ("http://gdata.youtube.com/feeds/base/users/ericwareheim/uploads" . "http://gdata.youtube.com/feeds/base/videos/someid") 0] ("https://gdata.youtube.com/feeds/api/playlists/someid" . "http://gdata.youtube.com/feeds/api/playlists/someid/someid") -1] ("https://gdata.youtube.com/feeds/api/playlists/somid" . "http://gdata.youtube.com/feeds/api/playlists/somid/somid") 1] ("http://someurl.com/feed/" . "http://someurl.com/2011/03/26/announcement-flutter-clojure-hiccup-form-fields/") 0] ("https://gdata.youtube.com/feeds/api/playlists/someid" . "http://gdata.youtube.com/feeds/api/playlists/somid/somid") 0] ("https://gdata.youtube.com/feeds/api/playlists/someid" . "http://gdata.youtube.com/feeds/api/playlists/somid/somid") -1] nil nil 0] elfeed-db-compare] :last-update 1391875428.1881661)
skeeto commented 10 years ago

@RafalBabinicz Thanks for reporting your situation. Since you're using a bleeding-edge version it seems this printer bug still exists in Emacs. I haven't personally experienced it in months, so comparing your and my habits may reveal something.

Do you ever kill (not just hit q) the *elfeed-search* buffer during updates? Killing this buffer causes a database write and I suspect the asynchronous TCP callbacks might somehow be modifying the hash table while it's being walked by the printer, causing truncation.

  • Error was introduced not during update.

This error would first be noticed only after loading Elfeed for the first time in a particular Emacs instance. Once the database is in memory it's never loaded again. The actual bug occurred in a previous instance of Emacs, where the Emacs printer failed to print the entire hash table. What's worse: this probably happens more often but goes undetected when it happens to print an even number of elements.

  • I compressed elfeed db.

Compression doesn't affect the index, so this would be unrelated.

Related files from my backup:

  • Data ~ 16MiB
  • index ~ 21.8 MiB

Wow, a 22MB index! You must follow a lot of feeds.

skeeto commented 10 years ago

@RafalBabinicz It just occurred to me that you didn't add all those ellipsis to your snippet. I think the problem has been that print-level and print-length are sometimes bound to non-default values when the database is being saved, such as inside a callback. 63d7ebf should fix this.