Woohoo! I Fixed My Flash Player (But I Don’t Know How)

I’ve been having a seemingly unending spate of HTPC issues over the past two weeks or so. I’m really not sure at all how it started, or what is going on, but I think I may have solved it (or at least most of it).

So, starting about two weeks ago, I got a call from my wife while I was out playing Darts that the computer in the living room wouldn’t wake up. She had wiggled the mouse, and she said the “fans spun up, but then back down again” and the screen stayed dark. So, she’d tried forcing it to reboot by powering it down and back up again. Same result. No POST. No beep. Nothing.

Little did I know that this would be the start of a annoying saga. Follow me on past the break if you want to know more…

The overclock had failed, or so I thought anyway (now I’m not so sure). Like any true geek, I have the CPU in my HTPC overclocked a bit. The overclock is not extreme by any means, and it had always been rock-solid. I had the Q9550 running at 3.4 GHz (400 FSB x 8.5 multiplier), at stock voltage. It had been thoroughly tested and had been working for the better part of a year with no real hardware issues, and no significant hardware changes. So, the sudden overclock failure was surprising.

So, I had her work around the issue (I have a Gigabyte board, and they’re pretty good at recovering from OC failures, it just takes a few cold boots sometimes) and I looked at it when I got home. I tested it, and everything seemed stable, but I decided to back off a bit on my OC (I brought it down to 3.31 GHz) and I bumped up the voltage on the CPU by the slightest bit. It seemed like it was working. We used it to watch a show or two and then went to bed.

The next day when I came home from work, I woke the system up like normal. I immediately noticed that something was odd. I heard the POST beep. It had apparently hibernated, rather than just gone into regular sleep like normal. I set the HTPC go to sleep after an hour of inactivity to save power, but I disable hibernation because it takes too long to resume for a TV-connected device (and hibernation is prone to failure anyway). But it had actually gone through POST this time (successfully), and then showed the “Resuming Windows” splash screen.

I was confused. How did that get turned on? Then, just as the boot sequence finished and I should see the blue Windows 7 “Welcome” screen, the monitor went black. It wasn’t just flickering black either, but I actually got the TV’s “no input” message. The hard drive indicator was still going to town, as though the machine was booting, but no video at all. So, I waited a bit and when nothing changed (and the drive indicator calmed down), I forced it to reboot again.

This time, the result was slightly different, but no more useful. After passing through the warning about the previous Resume failing (and deleting the resume data), the machine again started to boot. Again just as it was about to hit the Welcome Screen, I got nothing but black. This time, though, the monitor was getting input, just all black.

I immediately thought that perhaps my overclock was failing, and so I went back into the BIOS and put everything back to the defaults (full auto-mode). The machine booted up perfectly, seeming to confirm that something was failing in my overclock. So, I rebooted again, tweaked the overclock again (a little more voltage, a little less speed, rechecked my memory timings, etc, etc). Rebooted and all was good and right with the world. I went into the Power Settings control panel and made sure hibernation was disabled (it was), and the system ran perfectly that night for us.

The next day, I came home, and the system did the exact same thing again. First it had hibernated while I was gone (despite my explicit instructions). Resuming from hibernation resulted in no-input to the TV. Forced rebooting resulted in the black screen. So, this time I really set about trying to diagnose the issue. I discovered through testing that when it was in this “broken hibernation” state, I could get it to “come out of it” and boot properly by going into the BIOS and tweaking any of the overclocking settings. It didn’t matter what I did in there, just as long as something changed slightly. I tried tweaking other settings (like the Power Saver settings and other peripherals), but that didn’t help. But if I went into the overclocking settings and bumped the FSB down (or up) by even 1 notch, if I tweaked seemingly unrelated voltage settings, or bumped up one memory timing setting by 1 notch, the system would immediately boot.

I could also reproduce the error pretty much any time it was allowed to sleep. I dropped down the sleep settings to make reproduction quicker, and I was able to see that the system was hibernating just a short while after the scheduled idle-to-sleep setting. I checked the advanced Power Saver settings, and while Hibernation was still disabled, I did find a new setting called “Hybrid Sleep”, that I wasn’t all that familiar with. Microsoft describes Hybrid Sleep as follows:

Hybrid sleep is designed primarily for desktop computers. Hybrid sleep is a combination of sleep and hibernate—it puts any open documents and programs in memory and on your hard disk, and then puts your computer into a low-power state so that you can quickly resume your work. That way, if a power failure occurs, Windows can restore your work from your hard disk. When hybrid sleep is turned on, putting your computer into sleep automatically puts your computer into hybrid sleep. Hybrid sleep is typically turned on by default on desktop computers.

So, I disabled that, and the problem, finally, thankfully, went away. But that was weird, I hadn’t ever tweaked that setting before. Why was the system suddenly different after no changes?

I eventually set about a campaign to figure out what was going on. It led me though multiple video card driver installs (of various versions), and a thorough reversal of all of the new software I’d added to the system since my last “known good” date. Nothing seemed to make any difference. If the system was allowed to hibernate, then it wouldn’t come back up properly and it would get stuck in the weird black-screen issue until I tweaked something meaningless in the BIOS. I still haven’t fully figured this part out, but I don’t want the machine to hibernate anyway, so I’m okay with that for now.

But then, this past week, something new happened. I usually record The Daily Show and The Colbert Report with SageTV. This week, though, Time Warner decided to finally add the HD version of Comedy Central to our lineup (hurray!). Unfortunately, they added it to the program guide lineup before they actually turned the channel on. That made SageTV record on the new HD channel (since it prefers HD programs where possible), and all I got for a couple of days was the message from Time Warner that the channel was “coming soon”. Great. Thanks.

So, I watched them online. I often do that when I miss one of the shows, or if I want to go back and watch older episodes for some reason. This was all happening along with the hibernation issue (I was trying to relax and watch The Daily Show to forget about the computer woes). The first couple of days, it worked fine (or at least as “fine” as online Flash video ever works). Then, suddenly, on Thursday evening, I couldn’t get the videos to play.

The pre-roll commercial would load, but then as soon as the video itself would load, the audio would start playing, but instead of video I’d get just a green box (which seemed to hover overtop of the video window itself). It would “play” like this for a short bit, and then a few seconds in, the whole browser would completely freeze. I tested multiple browsers (IE, Chrome, and Firefox) and all reacted identically. I tried other video sites (YouTube, Vimeo, and even random videos on Engadget). Still, all reacted identically. It seemed like as soon as H264 video would start playing, it would freeze. Animations and older low-quality video was fine. Now what the hell was THIS?

That was when I really kicked my driver and software detective work into high-gear. I removed EVERYTHING I’d added over the past few days. I uninstalled/reinstalled Flash in a variety of interesting and complicated ways. I uninstalled Chrome and reinstalled it. I did everything I could think of. I was beginning to be convinced that my video card (an AMD Radeon HD 4870) was failing. Flash 10.1 does include hardware acceleration, after all, and it seemed like that was likely the culprit. (Though I did try to disable Acceleration via the Flash Settings UI, but that also didn’t help). Then, late last night, I dug around and found an old version of Flash 10.0 and installed it. Tested it. Everything worked.

Re-updated to 10.1 (which includes video acceleration). Everything is broken. So, I rolled back to 10.0 and went to bed.

This morning I set right back at it. I toyed with the software a bit with no luck, and I was just about out of ideas. I have an extra low-end PCIe video card (a Radeon HD 5450) on hand for testing and other bench work, so I decided it was time to try to swap out the card. I ran downstairs and grabbed the card, but then I decided it was worth pulling the 4870 out and just cleaning it off and reseating it. Just in case. So I did. I pulled it out, dusted it off, reconnected and untwisted the power cables, and plugged it back in.

Now Flash 10.1 works perfectly. I don’t know what the hell was going on, but Flash is fixed. I think I’m going to make some breakfast now. I haven’t decided if I want to go down the sleep/hibernation road or not, or just leave well enough alone for now.