martinrotter / rssguard

Feed reader (and podcast player) which supports RSS/ATOM/JSON and many web-based feed services.
GNU General Public License v3.0
1.64k stars 125 forks source link

[BUG]: Freeze after hibernation #1377

Open TeHMoroS opened 7 months ago

TeHMoroS commented 7 months ago

Brief description of the issue

RSSGuard freezes and goes 100% on a single CPU core after putting Windows into hibernation and waking up. It doesn't happen immediately, but after a few attempts. The attached logs show a total of 5 hibernations (longer, more than 4000 seconds in length gaps in the logs). Normally auto-fetch kicks in after wake up, but after the fifth hibernation there are no more log entries and the CPU goes 100% on a single core.

How to reproduce the bug?

  1. Run RSSGuard.
  2. Hibernate Windows.
  3. Wake up and wait for auto-fetch.
  4. Check if RSSGuard responds.
  5. Repeat steps 2-4 until it stops responding.

What was the expected result?

RSSGuard runs normally and auto-fetch kicks in as usual.

What actually happened?

RSSGuard locks up and utilizes a single core at 100%. Has to be forced to shutdown by the system.

Debug log

rssguard.log.gz

The log is quite big (few days of running). The most interesting parts are the bigger gaps in time (over 3600 seconds - auto-fetch set at 1h intervals). They are quite easy to find when searching for Saved data with auto-saver for 'CookieJar', but the logs cut short on the last entry, when RSSGuard hangs.

Operating system and version

martinrotter commented 7 months ago

Yes, this is very hard for me to reproduce so far. Will keep trying.

TeHMoroS commented 7 months ago

Thanks. I appreciate it. :)

And it's true - reproducing it might be a pain. Sometimes I can keep it running for a few days with hibernation in-between and it won't hang and sometimes it's frozen on the next day.

It's probably not a question of hibernating mid-fetch (there's a debug message "Now it's time to auto-fetch articles..." I assume is logged when fetching is about to begin?).

Maybe a scheduling issue? One thing is the passage of time. Maybe if enough time passes between auto-fetches, it does something strange to the calculation of how much time passed and if it's time already for another fetch? I haven't looked at the code yet, so I'm just assuming things at this point. ;)

TeHMoroS commented 6 months ago

I was trying to check whether this was an issue of hibernation going through a full day cycle (hibernated on one day, woke up on the next) but it's not the case. Seems I'll need to build my own version with more debug info attached around the FeedReader::executeNextAutoUpdate() method.

@martinrotter Are there any (short, at least) instructions on building on Windows? On Linux it's pretty straightforward, but Windows always adds a layer of complexity around such things. ;)

martinrotter commented 6 months ago

There is info in top of main Cmakelists.txt file. Bsically with cmake, the steps are the same. Just make sure to have Qt AND MSVC compiler installed. Just install Visual Studio 2022, then launch MSVC developer console and run commands from there.

Or even better install Qt Creator and compile from it.

martinrotter commented 6 months ago

BTW I also bumped into some kind of issue of this sort -> expressed itself when waking PC from sleep -> some feature of RSS Guard did not work (like fetching) and after some seconds, it crashed. Unable to get any reasonable stacktrace but looking into it.

TeHMoroS commented 6 months ago

BTW I also bumped into some kind of issue of this sort -> expressed itself when waking PC from sleep -> some feature of RSS Guard did not work (like fetching) and after some seconds, it crashed. Unable to get any reasonable stacktrace but looking into it.

Yeah, that sounds similar to my case. I'm doing those hibernation cycles regularly, so with additional logging, I might bump into something. If all reasonable attempts fail, I'll try dummy-debugging (basically log between each line of code and see how far it'll reach xD). I'll let you know when anything shows up.