Closed Bug 1366186 Opened 8 years ago Closed 8 years ago

File descriptor leak for places.sqlite

Categories

(Toolkit :: Places, defect)

52 Branch
defect
Not set
critical

Tracking

()

RESOLVED INCOMPLETE

People

(Reporter: ybyt4t, Unassigned)

Details

Attachments

(1 file)

Attached file thunderbird.strace
User Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Steps to reproduce: Run thunderbird for a while with IMAP account containing lots of messages. Actual results: Random UI errors and finally crash. I ran it in strace to figure out what is going on and found that it leaks file descriptors for the files $HOME/.thunderbird/<id>.default/places.sqlite and $HOME/.thunderbird/<id>.default/places.sqlite-wal. See the attached strace log. Depending on the setting of ulimit -n it takes some time until the file descriptor contingent is exceeded, but when that happens the process quickly crashes. In the log, the process/thread at fault is 16548, which is the thunderbird main process. I'm not familiar with the thunderbird sources, so I failed to figure out where in the code the issue might originate. I'm running version 52.1.1 on Arch Linux (which is the latest official version for Arch). The problem seems to be present for older 52.x versions, too, but not on 45.x (which was the previous release on Arch). --- pstree -p --- strace(16545)---thunderbird(16548)-+-{Cache2 I/O}(16566) |-{Compositor}(16572) |-{DOM Worker}(16593) |-{DataStorage}(16568) |-{DataStorage}(16569) |-{DataStorage}(16615) |-{GMPThread}(16571) |-{Gecko_IOThread}(16553) |-{HTML5 Parser}(16582) |-{Hang Monitor}(16565) |-{IPDL Background}(16583) |-{ImageBridgeChil}(16603) |-{ImageIO}(16576) |-{ImgDecoder #1}(16573) |-{ImgDecoder #2}(16574) |-{ImgDecoder #3}(16575) |-{JS Helper}(16557) |-{JS Helper}(16558) |-{JS Helper}(16559) |-{JS Helper}(16560) |-{JS Helper}(16561) |-{JS Helper}(16562) |-{JS Helper}(16563) |-{JS Helper}(16564) |-{JS Watchdog}(16556) |-{Link Monitor}(16554) |-{Proxy R~olution}(16605) |-{Socket Thread}(16555) |-{SoftwareVsyncTh}(16577) |-{Timer}(16567) |-{URL Classifier}(16597) |-{gdbus}(16552) |-{gmain}(16551) |-{localStorage DB}(16707) |-{mozStorage #100}(16797) |-{mozStorage #101}(16798) |-{mozStorage #102}(16799) |-{mozStorage #103}(16800) |-{mozStorage #104}(16801) |-{mozStorage #105}(16802) |-{mozStorage #106}(16803) |-{mozStorage #107}(16804) |-{mozStorage #108}(16805) |-{mozStorage #109}(16806) |-{mozStorage #10}(16627) |-{mozStorage #110}(16807) |-{mozStorage #111}(16808) |-{mozStorage #112}(16809) |-{mozStorage #113}(16810) |-{mozStorage #114}(16811) |-{mozStorage #115}(16812) |-{mozStorage #116}(16813) |-{mozStorage #117}(16814) |-{mozStorage #118}(16815) |-{mozStorage #119}(16816) |-{mozStorage #11}(16628) |-{mozStorage #120}(16817) |-{mozStorage #121}(16818) |-{mozStorage #122}(16819) |-{mozStorage #123}(16820) |-{mozStorage #124}(16821) |-{mozStorage #125}(16822) |-{mozStorage #126}(16823) |-{mozStorage #127}(16824) |-{mozStorage #128}(16825) |-{mozStorage #129}(16826) |-{mozStorage #12}(16629) |-{mozStorage #130}(16827) |-{mozStorage #131}(16828) |-{mozStorage #132}(16829) |-{mozStorage #133}(16830) |-{mozStorage #134}(16831) |-{mozStorage #135}(16832) |-{mozStorage #136}(16833) |-{mozStorage #137}(16834) |-{mozStorage #138}(16835) |-{mozStorage #139}(16836) |-{mozStorage #13}(16630) |-{mozStorage #140}(16837) |-{mozStorage #141}(16838) |-{mozStorage #142}(16839) |-{mozStorage #143}(16840) |-{mozStorage #144}(16841) |-{mozStorage #145}(16842) |-{mozStorage #146}(16843) |-{mozStorage #147}(16844) |-{mozStorage #148}(16845) |-{mozStorage #149}(16846) |-{mozStorage #14}(16631) |-{mozStorage #150}(16847) |-{mozStorage #151}(16848) |-{mozStorage #152}(16849) |-{mozStorage #153}(16850) |-{mozStorage #154}(16851) |-{mozStorage #155}(16852) |-{mozStorage #156}(16853) |-{mozStorage #157}(16854) |-{mozStorage #158}(16855) |-{mozStorage #159}(16856) |-{mozStorage #15}(16632) |-{mozStorage #160}(16857) |-{mozStorage #161}(16858) |-{mozStorage #162}(16859) |-{mozStorage #163}(16860) |-{mozStorage #164}(16861) |-{mozStorage #165}(16862) |-{mozStorage #166}(16863) |-{mozStorage #167}(16864) |-{mozStorage #168}(16865) |-{mozStorage #169}(16866) |-{mozStorage #16}(16633) |-{mozStorage #170}(16867) |-{mozStorage #171}(16870) |-{mozStorage #172}(16871) |-{mozStorage #173}(16872) |-{mozStorage #174}(16873) |-{mozStorage #175}(16874) |-{mozStorage #176}(16875) |-{mozStorage #177}(16876) |-{mozStorage #178}(16877) |-{mozStorage #179}(16878) |-{mozStorage #17}(16634) |-{mozStorage #180}(16879) |-{mozStorage #181}(16880) |-{mozStorage #182}(16881) |-{mozStorage #183}(16882) |-{mozStorage #184}(16883) |-{mozStorage #185}(16884) |-{mozStorage #186}(16885) |-{mozStorage #187}(16886) |-{mozStorage #188}(17609) |-{mozStorage #189}(17611) |-{mozStorage #18}(16635) |-{mozStorage #190}(17612) |-{mozStorage #191}(17613) |-{mozStorage #192}(17614) |-{mozStorage #193}(17615) |-{mozStorage #194}(17616) |-{mozStorage #195}(17617) |-{mozStorage #196}(17618) |-{mozStorage #197}(17619) |-{mozStorage #198}(17620) |-{mozStorage #199}(17621) |-{mozStorage #19}(16636) |-{mozStorage #1}(16585) |-{mozStorage #200}(17622) |-{mozStorage #201}(17623) |-{mozStorage #202}(17624) |-{mozStorage #203}(17625) |-{mozStorage #204}(17626) |-{mozStorage #205}(17627) |-{mozStorage #206}(17628) |-{mozStorage #207}(17629) |-{mozStorage #208}(17630) |-{mozStorage #209}(17631) |-{mozStorage #20}(16637) |-{mozStorage #210}(17632) |-{mozStorage #211}(17633) |-{mozStorage #212}(17634) |-{mozStorage #213}(17635) |-{mozStorage #214}(17636) |-{mozStorage #215}(17637) |-{mozStorage #216}(17638) |-{mozStorage #217}(17639) |-{mozStorage #218}(17640) |-{mozStorage #219}(17641) |-{mozStorage #21}(16638) |-{mozStorage #220}(17642) |-{mozStorage #221}(17643) |-{mozStorage #222}(17644) |-{mozStorage #223}(17645) |-{mozStorage #224}(17646) |-{mozStorage #225}(17647) |-{mozStorage #226}(17648) |-{mozStorage #227}(17649) |-{mozStorage #228}(17650) |-{mozStorage #229}(17651) |-{mozStorage #22}(16639) |-{mozStorage #230}(17652) |-{mozStorage #231}(17653) |-{mozStorage #232}(17654) |-{mozStorage #233}(17655) |-{mozStorage #234}(17656) |-{mozStorage #235}(17657) |-{mozStorage #236}(17658) |-{mozStorage #237}(17659) |-{mozStorage #238}(17660) |-{mozStorage #239}(17661) |-{mozStorage #23}(16640) |-{mozStorage #240}(17662) |-{mozStorage #241}(17663) |-{mozStorage #242}(17664) |-{mozStorage #243}(17665) |-{mozStorage #244}(17666) |-{mozStorage #245}(17667) |-{mozStorage #246}(17668) |-{mozStorage #247}(17669) |-{mozStorage #248}(17965) |-{mozStorage #249}(17966) |-{mozStorage #24}(16641) |-{mozStorage #250}(17967) |-{mozStorage #251}(17968) |-{mozStorage #252}(17969) |-{mozStorage #253}(17970) |-{mozStorage #254}(17971) |-{mozStorage #255}(17972) |-{mozStorage #256}(17973) |-{mozStorage #257}(17974) |-{mozStorage #258}(17975) |-{mozStorage #259}(17976) |-{mozStorage #25}(16642) |-{mozStorage #260}(17977) |-{mozStorage #261}(17978) |-{mozStorage #262}(17979) |-{mozStorage #263}(17980) |-{mozStorage #264}(17981) |-{mozStorage #265}(17982) |-{mozStorage #266}(17983) |-{mozStorage #267}(17984) |-{mozStorage #268}(17985) |-{mozStorage #269}(17986) |-{mozStorage #26}(16643) |-{mozStorage #270}(17987) |-{mozStorage #271}(17988) |-{mozStorage #272}(17989) |-{mozStorage #273}(17990) |-{mozStorage #274}(17991) |-{mozStorage #275}(17992) |-{mozStorage #276}(17993) |-{mozStorage #277}(17994) |-{mozStorage #278}(17995) |-{mozStorage #279}(17996) |-{mozStorage #27}(16644) |-{mozStorage #280}(17997) |-{mozStorage #281}(17998) |-{mozStorage #282}(17999) |-{mozStorage #283}(18000) |-{mozStorage #284}(18001) |-{mozStorage #285}(18002) |-{mozStorage #286}(18003) |-{mozStorage #287}(18004) |-{mozStorage #288}(18005) |-{mozStorage #289}(18006) |-{mozStorage #28}(16645) |-{mozStorage #290}(18007) |-{mozStorage #291}(18008) |-{mozStorage #292}(18009) |-{mozStorage #293}(18010) |-{mozStorage #294}(18011) |-{mozStorage #295}(18012) |-{mozStorage #296}(18013) |-{mozStorage #297}(18014) |-{mozStorage #298}(18015) |-{mozStorage #299}(18016) |-{mozStorage #29}(16646) |-{mozStorage #2}(16614) |-{mozStorage #300}(18017) |-{mozStorage #301}(18018) |-{mozStorage #302}(18019) |-{mozStorage #303}(18020) |-{mozStorage #304}(18021) |-{mozStorage #305}(18022) |-{mozStorage #306}(18023) |-{mozStorage #307}(18024) |-{mozStorage #308}(18141) |-{mozStorage #309}(18142) |-{mozStorage #30}(16647) |-{mozStorage #310}(18143) |-{mozStorage #311}(18144) |-{mozStorage #312}(18145) |-{mozStorage #313}(18146) |-{mozStorage #314}(18147) |-{mozStorage #315}(18148) |-{mozStorage #316}(18174) |-{mozStorage #317}(18175) |-{mozStorage #318}(18176) |-{mozStorage #319}(18177) |-{mozStorage #31}(16648) |-{mozStorage #320}(18178) |-{mozStorage #321}(18179) |-{mozStorage #322}(18180) |-{mozStorage #323}(18181) |-{mozStorage #324}(18182) |-{mozStorage #325}(18183) |-{mozStorage #326}(18184) |-{mozStorage #327}(18185) |-{mozStorage #328}(18186) |-{mozStorage #329}(18187) |-{mozStorage #32}(16649) |-{mozStorage #330}(18188) |-{mozStorage #331}(18189) |-{mozStorage #332}(18190) |-{mozStorage #333}(18191) |-{mozStorage #334}(18192) |-{mozStorage #335}(18193) |-{mozStorage #336}(18194) |-{mozStorage #337}(18195) |-{mozStorage #338}(18196) |-{mozStorage #339}(18197) |-{mozStorage #33}(16650) |-{mozStorage #340}(18198) |-{mozStorage #341}(18199) |-{mozStorage #342}(18200) |-{mozStorage #343}(18201) |-{mozStorage #344}(18202) |-{mozStorage #345}(18203) |-{mozStorage #346}(18204) |-{mozStorage #347}(18205) |-{mozStorage #348}(18206) |-{mozStorage #349}(18207) |-{mozStorage #34}(16651) |-{mozStorage #350}(18208) |-{mozStorage #351}(18209) |-{mozStorage #352}(18210) |-{mozStorage #353}(18211) |-{mozStorage #354}(18212) |-{mozStorage #355}(18213) |-{mozStorage #356}(18214) |-{mozStorage #357}(18215) |-{mozStorage #358}(18216) |-{mozStorage #359}(18217) |-{mozStorage #35}(16652) |-{mozStorage #360}(18218) |-{mozStorage #361}(18219) |-{mozStorage #362}(18220) |-{mozStorage #363}(18223) |-{mozStorage #364}(18224) |-{mozStorage #365}(18225) |-{mozStorage #366}(18226) |-{mozStorage #367}(18227) |-{mozStorage #368}(18228) |-{mozStorage #369}(18229) |-{mozStorage #36}(16653) |-{mozStorage #370}(18230) |-{mozStorage #371}(18231) |-{mozStorage #372}(18232) |-{mozStorage #373}(18233) |-{mozStorage #374}(18234) |-{mozStorage #375}(18235) |-{mozStorage #376}(18241) |-{mozStorage #377}(18242) |-{mozStorage #378}(18412) |-{mozStorage #379}(18413) |-{mozStorage #37}(16654) |-{mozStorage #380}(18416) |-{mozStorage #381}(18418) |-{mozStorage #382}(18421) |-{mozStorage #383}(18425) |-{mozStorage #384}(18426) |-{mozStorage #385}(18427) |-{mozStorage #386}(18428) |-{mozStorage #387}(18429) |-{mozStorage #388}(18431) |-{mozStorage #389}(18432) |-{mozStorage #38}(16655) |-{mozStorage #390}(18433) |-{mozStorage #391}(18434) |-{mozStorage #392}(18435) |-{mozStorage #393}(18436) |-{mozStorage #394}(18437) |-{mozStorage #395}(18438) |-{mozStorage #396}(18439) |-{mozStorage #397}(18440) |-{mozStorage #398}(18441) |-{mozStorage #399}(18442) |-{mozStorage #39}(16656) |-{mozStorage #3}(16620) |-{mozStorage #400}(18443) |-{mozStorage #401}(18444) |-{mozStorage #402}(18445) |-{mozStorage #403}(18446) |-{mozStorage #404}(18447) |-{mozStorage #405}(18448) |-{mozStorage #406}(18449) |-{mozStorage #407}(18450) |-{mozStorage #408}(18451) |-{mozStorage #409}(18452) |-{mozStorage #40}(16657) |-{mozStorage #410}(18453) |-{mozStorage #411}(18454) |-{mozStorage #412}(18455) |-{mozStorage #413}(18456) |-{mozStorage #414}(18457) |-{mozStorage #415}(18458) |-{mozStorage #416}(18459) |-{mozStorage #417}(18460) |-{mozStorage #418}(18461) |-{mozStorage #419}(18462) |-{mozStorage #41}(16658) |-{mozStorage #420}(18463) |-{mozStorage #421}(18464) |-{mozStorage #422}(18465) |-{mozStorage #423}(18466) |-{mozStorage #424}(18467) |-{mozStorage #425}(18468) |-{mozStorage #426}(18469) |-{mozStorage #427}(18470) |-{mozStorage #428}(18471) |-{mozStorage #429}(18472) |-{mozStorage #42}(16659) |-{mozStorage #430}(18473) |-{mozStorage #431}(18474) |-{mozStorage #432}(18475) |-{mozStorage #433}(18476) |-{mozStorage #434}(18477) |-{mozStorage #435}(18478) |-{mozStorage #436}(18479) |-{mozStorage #437}(18480) |-{mozStorage #43}(16660) |-{mozStorage #44}(16661) |-{mozStorage #45}(16662) |-{mozStorage #46}(16663) |-{mozStorage #47}(16664) |-{mozStorage #48}(16665) |-{mozStorage #49}(16666) |-{mozStorage #4}(16621) |-{mozStorage #50}(16667) |-{mozStorage #51}(16668) |-{mozStorage #52}(16669) |-{mozStorage #53}(16670) |-{mozStorage #54}(16671) |-{mozStorage #55}(16672) |-{mozStorage #56}(16673) |-{mozStorage #57}(16674) |-{mozStorage #58}(16675) |-{mozStorage #59}(16676) |-{mozStorage #5}(16622) |-{mozStorage #60}(16677) |-{mozStorage #61}(16678) |-{mozStorage #62}(16679) |-{mozStorage #63}(16685) |-{mozStorage #64}(16708) |-{mozStorage #65}(16709) |-{mozStorage #66}(16718) |-{mozStorage #67}(16719) |-{mozStorage #68}(16745) |-{mozStorage #69}(16753) |-{mozStorage #6}(16623) |-{mozStorage #70}(16754) |-{mozStorage #71}(16755) |-{mozStorage #72}(16756) |-{mozStorage #73}(16757) |-{mozStorage #74}(16758) |-{mozStorage #75}(16759) |-{mozStorage #76}(16760) |-{mozStorage #77}(16761) |-{mozStorage #78}(16762) |-{mozStorage #79}(16763) |-{mozStorage #7}(16624) |-{mozStorage #80}(16764) |-{mozStorage #81}(16765) |-{mozStorage #82}(16766) |-{mozStorage #83}(16767) |-{mozStorage #84}(16768) |-{mozStorage #85}(16769) |-{mozStorage #86}(16774) |-{mozStorage #87}(16775) |-{mozStorage #88}(16776) |-{mozStorage #89}(16777) |-{mozStorage #8}(16625) |-{mozStorage #90}(16778) |-{mozStorage #91}(16779) |-{mozStorage #92}(16780) |-{mozStorage #93}(16781) |-{mozStorage #94}(16791) |-{mozStorage #95}(16792) |-{mozStorage #96}(16793) |-{mozStorage #97}(16794) |-{mozStorage #98}(16795) |-{mozStorage #99}(16796) |-{mozStorage #9}(16626) |-{thunderbird}(16604) |-{thunderbird}(16608) |-{thunderbird}(16610) |-{thunderbird}(16746) `-{thunderbird}(18392) Expected results: Continue running.
Marco, can you please comment here. mozStorage and places.sqlite fall into your territory.
Flags: needinfo?(mak77)
There's something wrong there looks like it's creating hundreds of threads, when in reality it should just have 1. Maybe places.sqlite is corrupt. Could be related to bug 1355414 (and bug 1357366 that was uplifted only 11 days ago), where we constantly failed to replace the db and ended up replacing a corrupt db with itself. I'd suggest to try throwing away places.sqlite and see if the problem is gone.
Flags: needinfo?(mak77)
Severity: normal → critical
Component: Untriaged → Database
Product: Thunderbird → MailNews Core
Version: 52 Branch → 52
> I'd suggest to try throwing away places.sqlite and see if the problem is gone. Thanks. Looks like this did the trick. The file descriptor usage seems to stay below 70 for now. > There's something wrong there looks like it's creating hundreds of threads, when in reality it should just have 1. Really? It's much fewer mozStorage threads now, but only 1, no: --- pstree -p 13432 --- thunderbird(13432)─┬─{Cache2 I/O}(13450) ├─{Compositor}(13456) ├─{DOM Worker}(13472) ├─{DataStorage}(13452) ├─{DataStorage}(13453) ├─{DataStorage}(13488) ├─{GMPThread}(13455) ├─{Gecko_IOThread}(13437) ├─{HTML5 Parser}(13466) ├─{Hang Monitor}(13449) ├─{IPDL Background}(13467) ├─{ImageBridgeChil}(13478) ├─{ImageIO}(13460) ├─{ImgDecoder #1}(13457) ├─{ImgDecoder #2}(13458) ├─{ImgDecoder #3}(13459) ├─{JS Helper}(13441) ├─{JS Helper}(13442) ├─{JS Helper}(13443) ├─{JS Helper}(13444) ├─{JS Helper}(13445) ├─{JS Helper}(13446) ├─{JS Helper}(13447) ├─{JS Helper}(13448) ├─{JS Watchdog}(13440) ├─{Link Monitor}(13438) ├─{Proxy R~olution}(13480) ├─{Socket Thread}(13439) ├─{SoftwareVsyncTh}(13461) ├─{StreamTrans #10}(13614) ├─{Timer}(13451) ├─{URL Classifier}(13474) ├─{dconf worker}(13701) ├─{gdbus}(13436) ├─{gmain}(13435) ├─{localStorage DB}(13522) ├─{mozStorage #1}(13468) ├─{mozStorage #2}(13487) ├─{mozStorage #3}(13493) ├─{mozStorage #4}(13494) ├─{mozStorage #5}(13500) ├─{mozStorage #6}(13668) ├─{mozStorage #7}(13797) ├─{thunderbird}(13479) ├─{thunderbird}(13483) ├─{thunderbird}(13485) ├─{thunderbird}(13503) ├─{thunderbird}(13513) ├─{thunderbird}(13516) ├─{thunderbird}(13517) ├─{thunderbird}(13518) └─{thunderbird}(13682)
well, Places is not the only thing using mozStorage, I referred to the fact places should only have 1 thread (apart from the main-thread). But actually, it could use 2, since we clone the connection for visited links coloring. In Firefox we have more clones (the awesomebar has another clone) and thus more threads.
(In reply to Marco Bonardo [::mak] from comment #4) > well, Places is not the only thing using mozStorage, ... Right. There are a heap of other databases, like Mailnew's Gloda or permissions.sqlite and more. I'm not sure why Wayne moved this to Mailnews Core::Database, since it's got nothing to do with message databases. If anything, this should go to Toolkit::Places since it seems to be caused by a corrupt places.sqlite. Anyway, no action required here, so I'll close this as "incomplete" since we'll never know the cause for sure, and since it's not "invalid" or "wontfix".
Status: UNCONFIRMED → RESOLVED
Closed: 8 years ago
Component: Database → Places
Product: MailNews Core → Toolkit
Resolution: --- → INCOMPLETE
Version: 52 → 52 Branch
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: