Bug 746 - Micro-break not counting down
Status:
RESOLVED FIXED
Component:
Core :: Win32
Version:
1.8.5
Hardware:
PC Windows XP
Importance:
P1 critical
Target Milestone:
---
Assignee:
Ray Satiro
URL:
Depends on:
Blocks:
Reported:
May 31 2008 00:24:05 UTC
by:
Adam
Modified:
Feb 12 2009 23:07:47 UTC
CC List:
Adam
Ray Satiro
Rob Caelers
Akop
John
| Id | Who | When | Size | Type |
|---|---|---|---|---|
| 171 | timer debug output | |||
| Ray Satiro | Jan 22 2009 19:27:39 UTC | 184650 | text/plain | |
| Who | When | What | Removed | Added |
|---|---|---|---|---|
| Rob Caelers | Aug 5 2008 18:34:09 UTC | cc | Rob Caelers | |
| John | Sep 9 2008 23:03:02 UTC | cc | jm**@ve**.com | |
| Adam | Sep 30 2008 22:04:17 UTC | cc | Adam | |
| priority | P4 | P1 | ||
| Ray Satiro | Nov 18 2008 07:04:37 UTC | cc | Ray Satiro | |
| status | NEW | ASSIGNED | ||
| Ray Satiro | Nov 18 2008 07:27:25 UTC | assigned_to | Raymond Penners | Ray Satiro |
| status | ASSIGNED | NEW | ||
| Akop | Jan 13 2009 19:42:00 UTC | cc | Akop | |
| Ray Satiro | Jan 13 2009 21:28:49 UTC | status | NEW | ASSIGNED |
| Ray Satiro | Feb 12 2009 23:07:47 UTC | status | ASSIGNED | RESOLVED |
| resolution | FIXED |
Description
Adam May 31 2008 00:24:05 UTC
I've noticed that several times, the Micro-break counter stops counting down. This happens after a rest break. I have the timer set for 5 minutes, and it simply has the 5 minutes in green, but is not counting down. I only notice this after a while has passed and I think "hey, shouldn't this have asked me to take a micro-break by now?" The only way to get the timer working again is to go to the Preferences, uncheck "Enable timer" for Micro-break, hit close. Now go back to preference, re-check "Enable timer".
Comment 1
Rob Caelers Jun 8 2008 20:48:20 UTC
Weird. Could you please check: - The mode is set to 'normal'. - Move your mouse for a few (5) seconds. Does the timer start counting down? Only the microbreak timer stops counting down? Do you have the 'suspend when inactive' option enabled or disabled?
Comment 2
Joseph o'Loughlin Jun 11 2008 14:27:24 UTC
I too have this problem. Thanks for the workaround, but Workrave then crashed. I use workrave on a multihomed laptop and a low spec desktop, both running SP3. Crash log created on 11/06/2008 at 13:15:55. version = 1.8.5 compile date = Sep 14 2007 compile time = 22:16:06 features = DISTRIBUTION EXERCISES GNET GNET2 GTK_MULTIHEAD code = c0000005 flags = 0 address = 7c910cae params = 2 C:\Program Files\Workrave\lib\Workrave.exe caused an Access Violation at location 7c910cae in module C:\Program Files\Workrave\lib\Workrave.exe reading from location 00000000 Registers: eax=00000000 ebx=00d40000 ecx=01991a10 edx=00d40178 esi=01991a08 edi=005ef874 eip=7c910cae esp=0022e724 ebp=0022e944 iopl=0 nv up ei pl nz ac pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00210212 Stack trace: PC Frame Ret 7C910CAE 0022E944 77C2C3C9 77C2C3C9 0022E984 77C2C3E7 77C2C3E7 0022E990 77C2C42E 77C2C42E 0022E9A0 00744179 00744179 0022E9C0 008A595A 008A595A 0022EB00 0054D416 0054D416 0022EB30 0044F28B 0044F28B 0022EB60 00456DAB 00456DAB 0022EB90 0045DDB8 0045DDB8 0022EBB0 00463368 00463368 0022EBD0 00464413 00464413 0022EC30 004158F4 004158F4 0022ED74 004179EC 004179EC 0022EE30 00418E94 00418E94 0022EF04 0040C052 0040C052 0022EF80 0040CE42 0040CE42 0022EFC0 0041F457 0041F457 0022F01C 0054D9C5 0054D9C5 0022F03C 008A3935 008A3935 0022F09C 008B7325 008B7325 0022F18C 008B7CDE 008B7CDE 0022F40C 008B7F56 008B7F56 0022F42C 00BE8BD5 00BE8BD5 0022F44C 00ADA1FC 00ADA1FC 0022F47C 00ADA505 00ADA505 0022F4AC 00AC69B2 00AC69B2 0022F4DC 008A3935 008A3935 0022F53C 008B6B66 008B6B66 0022F62C 008B7A3C 008B7A3C 0022F8AC 008B7F56 008B7F56 0022F8CC 00BE8D64 00BE8D64 0022F8FC 00AC3B61 00AC3B61 0022F92C 00AC4E4D 00AC4E4D 0022F97C 0091096E 0091096E 0022F99C 0073D8F7 0073D8F7 0022F9EC 0073EDCB 0073EDCB 0022FA2C 0073EFAA 0073EFAA 0022FA5C 00AC43BE 00AC43BE 0022FAAC 0046DC13 0046DC13 0022FABC 004052A3 004052A3 0022FAE0 004210BB 004210BB 0022FAF4 0042110E 0042110E 0022FEF8 0056C6AA 0056C6AA 0022FF78 00401237 00401237 0022FFB0 004012A8 004012A8 0022FFC0 7C817067 7C817067 0022FFF0 00000000 C:\Program Files\Workrave\lib\Workrave.exe handle: 00400000 date: 2007-09-14 22:23:03 C:\WINDOWS\system32\ntdll.dll handle: 7C900000 date: 2008-04-14 04:41:26 C:\WINDOWS\system32\kernel32.dll handle: 7C800000 date: 2008-04-14 04:41:58 C:\Program Files\Workrave\lib\libatk-1.0-0.dll handle: 10000000 date: 2007-09-14 22:10:38 C:\Program Files\Workrave\lib\libglib-2.0-0.dll handle: 00720000 date: 2007-09-14 22:10:38 C:\Program Files\Workrave\lib\iconv.dll handle: 007C0000 date: 2003-05-23 19:45:12 C:\WINDOWS\system32\MSVCRT.dll handle: 77C10000 date: 2008-04-14 04:42:02 C:\Program Files\Workrave\lib\intl.dll handle: 003F0000 date: 2005-10-02 21:18:29 C:\WINDOWS\system32\ADVAPI32.DLL handle: 77DD0000 date: 2008-04-14 04:41:50 C:\WINDOWS\system32\RPCRT4.dll handle: 77E70000 date: 2008-04-14 04:42:06 C:\WINDOWS\system32\Secur32.dll handle: 77FE0000 date: 2008-04-14 04:42:06 C:\WINDOWS\system32\OLE32.dll handle: 774E0000 date: 2008-04-14 04:42:04 C:\WINDOWS\system32\GDI32.dll handle: 77F10000 date: 2008-04-14 04:41:56 C:\WINDOWS\system32\USER32.dll handle: 7E410000 date: 2008-04-14 04:42:10 C:\WINDOWS\system32\SHELL32.DLL handle: 7C9C0000 date: 2008-04-14 04:42:06 C:\WINDOWS\system32\SHLWAPI.dll handle: 77F60000 date: 2008-04-14 04:42:06 C:\WINDOWS\system32\WS2_32.DLL handle: 71AB0000 date: 2008-04-14 04:42:12 C:\WINDOWS\system32\WS2HELP.dll handle: 71AA0000 date: 2008-04-14 04:42:12 C:\Program Files\Workrave\lib\libgobject-2.0-0.dll handle: 008A0000 date: 2007-09-14 22:10:38 C:\Program Files\Workrave\lib\libcairo-2.dll handle: 67AC0000 date: 2007-09-14 22:10:39 C:\Program Files\Workrave\lib\libpng13.dll handle: 67580000 date: 2007-09-14 22:10:38 C:\Program Files\Workrave\lib\zlib1.dll handle: 61B80000 date: 2007-09-14 22:10:38 C:\Program Files\Workrave\lib\libgdk-win32-2.0-0.dll handle: 008E0000 date: 2007-09-14 22:10:38 C:\Program Files\Workrave\lib\libgdk_pixbuf-2.0-0.dll handle: 00990000 date: 2007-09-14 22:10:38 C:\Program Files\Workrave\lib\libgmodule-2.0-0.dll handle: 009B0000 date: 2007-09-14 22:10:38 C:\Program Files\Workrave\lib\libpango-1.0-0.dll handle: 64280000 date: 2007-09-14 22:10:39 C:\Program Files\Workrave\lib\libpangocairo-1.0-0.dll handle: 6C1C0000 date: 2007-09-14 22:10:39 C:\Program Files\Workrave\lib\libpangowin32-1.0-0.dll handle: 69F80000 date: 2007-09-14 22:10:39 C:\WINDOWS\system32\IMM32.DLL handle: 76390000 date: 2008-04-14 04:41:56 C:\Program Files\Workrave\lib\gnet-2.0.dll handle: 6BF80000 date: 2007-09-14 22:10:38 C:\Program Files\Workrave\lib\libgthread-2.0-0.dll handle: 009C0000 date: 2007-09-14 22:10:38 C:\Program Files\Workrave\lib\libgtk-win32-2.0-0.dll handle: 009D0000 date: 2007-09-14 22:10:39 C:\WINDOWS\system32\COMCTL32.DLL handle: 5D090000 date: 2008-04-14 04:41:52 C:\WINDOWS\system32\COMDLG32.DLL handle: 763B0000 date: 2008-04-14 04:41:52 C:\WINDOWS\system32\WINSPOOL.DRV handle: 73000000 date: 2008-04-14 04:42:46 C:\WINDOWS\system32\WINMM.DLL handle: 76B40000 date: 2008-04-14 04:42:10 C:\Program Files\Workrave\lib\harpoon.dll handle: 00D30000 date: 2007-09-14 22:10:52 C:\WINDOWS\system32\LPK.DLL handle: 629C0000 date: 2008-04-14 04:41:58 C:\WINDOWS\system32\USP10.dll handle: 74D90000 date: 2008-04-14 04:42:10 C:\WINDOWS\system32\sockspy.dll handle: 01270000 date: 2006-01-26 19:19:52 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll handle: 773D0000 date: 2008-04-14 04:42:52 C:\WINDOWS\system32\MSCTF.dll handle: 74720000 date: 2008-04-14 04:42:00 C:\Program Files\Unlocker\UnlockerHook.dll handle: 01390000 date: 2006-09-07 17:18:56 C:\WINDOWS\system32\SynTPFcs.dll handle: 63000000 date: 2004-02-05 16:07:42 C:\WINDOWS\system32\VERSION.dll handle: 77C00000 date: 2008-04-14 04:42:10 C:\Program Files\Logitech\SetPoint\lgscroll.dll handle: 10100000 date: 2008-01-09 12:30:52 C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.1433_x-ww_5cf844d2\MSVCR80.dll handle: 78130000 date: 2007-10-24 01:47:56 C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.1433_x-ww_5cf844d2\MSVCP80.dll handle: 7C420000 date: 2007-10-24 01:47:56 C:\WINDOWS\system32\NTMARTA.DLL handle: 77690000 date: 2008-04-14 04:42:04 C:\WINDOWS\system32\SAMLIB.dll handle: 71BF0000 date: 2008-04-14 04:42:06 C:\WINDOWS\system32\WLDAP32.dll handle: 76F60000 date: 2008-04-14 04:42:10 C:\WINDOWS\system32\msctfime.ime handle: 755C0000 date: 2008-04-14 04:40:08 C:\WINDOWS\system32\CLBCATQ.DLL handle: 76FD0000 date: 2008-04-14 04:41:52 C:\WINDOWS\system32\COMRes.dll handle: 77050000 date: 2008-04-14 04:41:52 C:\WINDOWS\system32\OLEAUT32.dll handle: 77120000 date: 2008-04-14 04:42:04 C:\WINDOWS\System32\msimtf.dll handle: 746F0000 date: 2008-04-14 04:42:00 C:\WINDOWS\system32\SETUPAPI.dll handle: 77920000 date: 2008-04-14 04:42:06 C:\WINDOWS\System32\mswsock.dll handle: 71A50000 date: 2008-04-14 04:42:02 C:\WINDOWS\system32\DNSAPI.dll handle: 76F20000 date: 2008-04-14 04:41:54 C:\WINDOWS\System32\winrnr.dll handle: 76FB0000 date: 2008-04-14 04:42:10 C:\Program Files\Bonjour\mdnsNSP.dll handle: 16080000 date: 2007-07-24 15:17:08 C:\WINDOWS\system32\Iphlpapi.dll handle: 76D60000 date: 2008-04-14 04:41:56 C:\WINDOWS\system32\wshbth.dll handle: 751D0000 date: 2008-04-14 04:42:12 C:\WINDOWS\system32\rasadhlp.dll handle: 76FC0000 date: 2008-04-14 04:42:04 C:\WINDOWS\system32\bmnet.dll handle: 01A10000 date: 2004-09-22 15:43:10 C:\WINDOWS\system32\hnetcfg.dll handle: 662B0000 date: 2008-04-14 04:41:56 C:\WINDOWS\System32\wshtcpip.dll handle: 71A90000 date: 2008-04-14 04:42:12 C:\Program Files\Workrave\lib\gtk-2.0\2.10.0\engines\libwimp.dll handle: 01FE0000 date: 2007-09-14 22:10:39 C:\WINDOWS\system32\uxtheme.dll handle: 5AD70000 date: 2008-04-14 04:42:10 C:\Program Files\Workrave\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-png.dll handle: 02000000 date: 2007-09-14 22:10:39 C:\WINDOWS\system32\mscms.dll handle: 73B30000 date: 2008-04-14 04:42:00 C:\WINDOWS\system32\icm32.dll handle: 66E90000 date: 2008-04-14 04:41:56 C:\Program Files\Plaxo\3.12.0.48\plx_hook.dll handle: 23000000 date: 2008-05-06 10:09:06 C:\WINDOWS\system32\MSVCP60.dll handle: 76080000 date: 2008-04-14 04:42:02 C:\WINDOWS\system32\mslbui.dll handle: 605D0000 date: 2008-04-14 04:42:02 C:\WINDOWS\system32\WINTRUST.dll handle: 76C30000 date: 2008-04-14 04:42:10 C:\WINDOWS\system32\CRYPT32.dll handle: 77A80000 date: 2008-04-14 04:41:52 C:\WINDOWS\system32\MSASN1.dll handle: 77B20000 date: 2008-04-14 04:42:00 C:\WINDOWS\system32\IMAGEHLP.dll handle: 76C90000 date: 2008-04-14 04:41:56 C:\WINDOWS\system32\wdmaud.drv handle: 72D20000 date: 2008-04-14 04:42:46 C:\WINDOWS\system32\msacm32.drv handle: 72D10000 date: 2001-08-18 12:00:00 C:\WINDOWS\system32\MSACM32.dll handle: 77BE0000 date: 2008-04-14 04:42:00 C:\WINDOWS\system32\midimap.dll handle: 77BD0000 date: 2008-04-14 04:41:58 C:\WINDOWS\system32\netapi32.dll handle: 5B860000 date: 2008-04-14 04:42:02 C:\Program Files\Mousotron\BSMTHOOK.DLL handle: 024C0000 date: 2005-09-17 13:52:22 C:\WINDOWS\system32\psapi.dll handle: 76BF0000 date: 2008-04-14 04:42:04 Registry dump: key = Software\Workrave key = Software\Workrave\distribution value = port string data = 27273 value = reconnect_attempts string data = 5 value = reconnect_interval string data = 15 value = enabled string data = 1 value = username string data = joseph value = password string data = <hidden> value = peers string data = tcp://192.168.1.34:27273 key = Software\Workrave\gui value = operation-mode string data = 0 key = Software\Workrave\gui\applet value = cycle_time string data = 10 key = Software\Workrave\gui\applet\micro_pause value = flags string data = 0 key = Software\Workrave\gui\breaks value = block_mode string data = 2 key = Software\Workrave\gui\breaks\daily_limit value = max_preludes string data = 3 value = max_postpone string data = -1 value = ignorable_break string data = 1 value = enabled string data = 1 value = exercises string data = 0 key = Software\Workrave\gui\breaks\micro_pause value = max_preludes string data = 3 value = max_postpone string data = -1 value = ignorable_break string data = 1 value = enabled string data = 1 value = exercises string data = 0 key = Software\Workrave\gui\breaks\rest_break value = max_preludes string data = 3 value = max_postpone string data = -1 value = ignorable_break string data = 1 value = enabled string data = 1 value = exercises string data = 3 key = Software\Workrave\gui\main_window value = cycle_time string data = 10 value = x string data = 228 value = y string data = 30 value = head string data = 0 value = always_on_top string data = 1 key = Software\Workrave\gui\main_window\daily_limit value = position string data = 2 key = Software\Workrave\gui\main_window\micro_pause value = position string data = 0 key = Software\Workrave\gui\main_window\rest_break value = position string data = 1 key = Software\Workrave\sound value = enabled string data = 1 value = device string data = soundcard key = Software\Workrave\timers key = Software\Workrave\timers\daily_limit value = limit string data = 7200 value = auto_reset string data = 0 value = reset_pred string data = day/4:00 value = snooze string data = 1200 value = activity_sensitive string data = 1 key = Software\Workrave\timers\micro_pause value = limit string data = 120 value = auto_reset string data = 30 value = reset_pred string data = value = snooze string data = 120 value = activity_sensitive string data = 1 key = Software\Workrave\timers\rest_break value = limit string data = 1500 value = auto_reset string data = 600 value = reset_pred string data = value = snooze string data = 180 value = activity_sensitive string data = 1
Comment 3
Rob Caelers Jun 14 2008 18:01:12 UTC
Workrave crashed while opening the preferences? Is this reproducible? 00464413 0022EC30 004158F4 Gtk::HBox::HBox 004158F4 0022ED74 004179EC TimeEntry::TimeEntry 004179EC 0022EE30 00418E94 TimerPreferencesPanel::create_timers_panel 00418E94 0022EF04 0040C052 TimerPreferencesPanel::TimerPreferencesPanel 0040C052 0022EF80 0040CE42 PreferencesDialog::create_timer_page
Comment 4
Adam Jun 14 2008 18:16:08 UTC
I haven't seen WorkRave crash, personally. The "timer stopped counting" problem is hard to pin down. I've seen it at least 10 times, so it definitely repro's sometimes, BUT I've never been able to figure out the exact steps. Sorry, I realize that makes debugging this a real pain. As for your questions: - The mode is set to 'normal'. (yes) - Move your mouse for a few (5) seconds. Does the timer start counting down? (nope) Only the microbreak timer stops counting down? (right) - Do you have the 'suspend when inactive' option enabled or disabled? (disabled) Also, I found out that I only need to go to settings, uncheck "Enable timer" - wait a moment for the screen to update without a timer - then recheck "enable timer". I don't actually have to hit close. I'll update this bug if I ever figure out better repro steps. If you have any progress keep us posted! Thanks!
Comment 5
Adam Jun 14 2008 18:16:41 UTC
I haven't seen WorkRave crash, personally. The "timer stopped counting" problem is hard to pin down. I've seen it at least 10 times, so it definitely repro's sometimes, BUT I've never been able to figure out the exact steps. Sorry, I realize that makes debugging this a real pain. As for your questions: - The mode is set to 'normal'. (yes) - Move your mouse for a few (5) seconds. Does the timer start counting down? (nope) Only the microbreak timer stops counting down? (right) - Do you have the 'suspend when inactive' option enabled or disabled? (disabled) Also, I found out that I only need to go to settings, uncheck "Enable timer" - wait a moment for the screen to update without a timer - then recheck "enable timer". I don't actually have to hit close. I'll update this bug if I ever figure out better repro steps. If you have any progress keep us posted! Thanks!
Comment 6
Adam Aug 5 2008 17:48:09 UTC
Any updates on this? This bug occurs daily, though specific repro steps are still difficult. The micro-break counter simply turns green and stops counting down. My settings have it at 8min between breaks, 30 second breaks, 2 min postpone. "Show postpone and skip" is checked, "Suspend timer when inactive" is not. Mode is "Normal". The work-around is to uncheck "Enable timer", wait for the timer window to disappear, then recheck "Enable timer". But this gets annoying, and I also fail to notice the breaks stopped occuring so I work longer than I should. Bad for RSI! Let me know if I can help further. - Adam
Comment 7
Rob Caelers Aug 5 2008 18:34:09 UTC
I think the disabled 'Suspend timer when inactive' is causing these troubles. I personally never run workrave with this option disabled. I will disable the options here and see if I can reproduce it. You could also try to install workrave 1.9.0. You never know....
Comment 8
Adam Aug 5 2008 18:42:57 UTC
Thanks Rob. I like having the timer countdown even when there's no activity as it reminds me to do some stretches every few minutes, or stand up, etc. I'll also try 1.9.0 and keep you posted if that helps. Thanks!
Comment 9
John Sep 9 2008 23:03:02 UTC
I am having the same problem. I have "Suspend timer when inactive" disabled. (Using version 1.9.0)
Comment 10
Adam Sep 30 2008 22:04:17 UTC
Could someone *please* look into this? This is one of THE most important features of WorkRave if not the entire point - to remind you to take breaks! Every single day and several times a day the counter gets stuck and I forget to take a break. For most people this is fine, but I only remember to take a break when my hands start hurting. OOPS...waited too long. This is why I installed WorkRave to help! Thanks a lot for your support, it IS appreciated. - Adam
Comment 11
Ray Satiro Nov 18 2008 07:04:37 UTC
We have no reliable way to reproduce. I've replicated your settings and we'll see what happens.
Comment 12
Ray Satiro Nov 18 2008 07:27:25 UTC
I just observed this bug. I'll run a trace to look for the cause this week.
Comment 13
Adam Nov 18 2008 16:14:56 UTC
Awesome, thanks!
Comment 14
Akop Jan 13 2009 19:42:00 UTC
I can confirm this too; it happens to me multiple times a day. I'm using Workrave 1.90.0. My settings: Microbreaks: 3:00 0:30 0:30 Rest breaks: 20:00 5:00 3:00 Daily limit: Disabled Show postpone and skip checked for all Suspend timer unchecked for all Prompt before breaking unchecked for all As Adam mentioned, this issue is pretty important, since I use it to rest my eyes.
Comment 15
Ray Satiro Jan 13 2009 21:28:49 UTC
We are investigating this issue and it has been discussed as recently as today. We agree it is very important. Unfortunately there are bugs that affect a larger number of users and they have priority. I don't actively classify bugs using bugzilla's priority timestamps (but maybe I should). For the time being please enable 'Suspend timer when inactive' for Micro-breaks. The behavior of the timer will be different of course. You can attempt to compensate for the change by lowering the time between micro-breaks. You do not need to modify your rest break settings. Thanks, Ray
Comment 16
Ray Satiro Jan 22 2009 19:27:39 UTC
Created attachment 171
timer debug output
To reproduce:
-Set micro_pause break time/duration/postpone to 30 seconds each.
-Set rest_break break time/duration/postpone to 1 minute each.
-Disable 'Suspend timer when inactive' for both micro_pause and rest_break.
-Change operation Mode>Suspended and wait until the micro_pause and rest_break timers reset to :30 and 1:00, respectively.
-Change operation Mode>Normal. Move the mouse briefly until the timers start.
Timer::start_timer() timer_id == "micro_pause" , timer_state == STATE_STOPPED, timer_frozen == false
Timer::start_timer() timer_id == "rest_break" , timer_state == STATE_STOPPED, timer_frozen == false
-Once the timers have started do not instigate any type of input (mouse/keyboard).
-A micro break should take place and afterward its timer will reset to :30.
Timer::stop_timer() timer_id == "micro_pause" , timer_state == STATE_RUNNING
Timer::stop_timer() timer_id == "micro_pause" , timer_state == STATE_STOPPED
freeze_timer (true) timer_id == "micro_pause"
freeze_timer (true) timer_id == "rest_break"
freeze_timer (true) timer_id == "daily_limit"
Timer::reset_timer() timer_id == "micro_pause" , timer_state == STATE_STOPPED
freeze_timer (false) timer_id == "micro_pause"
freeze_timer (false) timer_id == "rest_break"
freeze_timer (false) timer_id == "daily_limit"
-A rest break should take place immediately following the micro break reset. If you have exercises enabled click the X button to terminate them.
Timer::stop_timer() timer_id == "rest_break" , timer_state == STATE_RUNNING
Timer::stop_timer() timer_id == "rest_break" , timer_state == STATE_STOPPED
freeze_timer (true) timer_id == "micro_pause"
freeze_timer (true) timer_id == "rest_break"
freeze_timer (true) timer_id == "daily_limit"
-You should now see the rest break window, and the micro break timer should still read :30.
-Move the mouse around for a few seconds to generate input.
Timer::start_timer() timer_id == "micro_pause" , timer_state == STATE_STOPPED, timer_frozen == true
-Click 'Skip' or wait for the break to end.
Timer::reset_timer() timer_id == "rest_break" , timer_state == STATE_STOPPED
freeze_timer (false) timer_id == "micro_pause"
freeze_timer (false) timer_id == "rest_break"
freeze_timer (false) timer_id == "daily_limit"
-Move the mouse around for a few seconds to generate input.
Timer::start_timer() timer_id == "rest_break" , timer_state == STATE_STOPPED, timer_frozen == false
/reproduction.
---------------------------------------------------------
At this point both the rest_break and the micro_pause timer are unfrozen ( timer_frozen == 0 ) and flagged STATE_RUNNING. However, the micro_pause timer is not counting down: bug 746.
Here's what Timer::process() looks like during this time:
Timer::process() "micro_pause" ; idle: 56 , elapsed: 0, enabled: true, last_start_time: 0, last_stop_time: 0, next_pred_reset_time: 0, next_reset_time: 0, time: 0x004f8360 time(__int64 *), ACTIVITY_ACTIVE
>Timer::process() "micro_pause" ; current_time: 1232488391, next_limit_time: 0, last_limit_time: 0, limit_interval: 30, next_pred_reset_time: 0, autoreset_interval_predicate: 0x00000000 {last_time=??? }, new_activity_state: ACTIVITY_ACTIVE , activity_state: ACTIVITY_ACTIVE, timer_state: STATE_RUNNING
Timer::process() "rest_break" ; idle: 0 , elapsed: 1, enabled: true, last_start_time: 1232488390, last_stop_time: 0, next_pred_reset_time: 0, next_reset_time: 0, time: 0x004f8360 time(__int64 *), ACTIVITY_ACTIVE
>Timer::process() "rest_break" ; current_time: 1232488391, next_limit_time: 1232488450, last_limit_time: 0, limit_interval: 60, next_pred_reset_time: 0, autoreset_interval_predicate: 0x00000000 {last_time=??? }, new_activity_state: ACTIVITY_ACTIVE , activity_state: ACTIVITY_ACTIVE, timer_state: STATE_RUNNING
And here's what it should look like:
Timer::process() "micro_pause" ; idle: 0 , elapsed: 1, enabled: true, last_start_time: 1232488284, last_stop_time: 0, next_pred_reset_time: 0, next_reset_time: 0, time: 0x004f8360 time(__int64 *), ACTIVITY_ACTIVE
>Timer::process() "micro_pause" ; current_time: 1232488285, next_limit_time: 1232488314, last_limit_time: 0, limit_interval: 30, next_pred_reset_time: 0, autoreset_interval_predicate: 0x00000000 {last_time=??? }, new_activity_state: ACTIVITY_ACTIVE , activity_state: ACTIVITY_ACTIVE, timer_state: STATE_RUNNING
Timer::process() "rest_break" ; idle: 0 , elapsed: 1, enabled: true, last_start_time: 1232488284, last_stop_time: 0, next_pred_reset_time: 0, next_reset_time: 0, time: 0x004f8360 time(__int64 *), ACTIVITY_ACTIVE
>Timer::process() "rest_break" ; current_time: 1232488285, next_limit_time: 1232488344, last_limit_time: 0, limit_interval: 60, next_pred_reset_time: 0, autoreset_interval_predicate: 0x00000000 {last_time=??? }, new_activity_state: ACTIVITY_ACTIVE , activity_state: ACTIVITY_ACTIVE, timer_state: STATE_RUNNING
The notable difference here is the micro_pause timer does not have a last_start_time or next_limit_time set when the bug occurs. Also, watching the Timer::process() for micro_pause continuously when the bug is present shows that none of the variables are changing other than current_time.
---------------------------------------------------------
Timer::start_timer()
--------------------
There is a comment:
--------
// The timer is frozen, so we don't start counting 'active' time.
--------
The function zeroes out last_stop_time and next_reset_time if the timer is not already running. When a timer is started in a frozen state and is not already running, last_start_time is also zeroed out (note the comment).
Timer::freeze_timer()
--------------------
There is a comment:
--------
// Only enabled activity sensitive timers care about freezing.
--------
The function freezes/unfreezes activity sensitive timers only (note the comment).
The micro_pause timer is not counting down because by design it does not count active time in a frozen state. Note in the reproduction that after the rest break ends the timers are unfrozen, but because there is no code to unfreeze a frozen activity insensitive timer the micro_pause timer doesn't unfreeze. The bug is either that there is no code to unfreeze the timer or that it is allowed to freeze at all.
I've looked at many ways to resolve this issue in the timer class but most of them end up breaking something else. I have a patch for freeze_timer() to handle activity insensitive timers that doesn't *appear* to break anything. I will request that it be incorporated into the trunk so that it can be tested further.
The full trace is attached. The timers traced are insensitive (activity_sensitive is false) throughout the trace.Comment 17
Ray Satiro Feb 2 2009 07:39:41 UTC
Fix applied. Please try this recent build and tell us if you experience the same problem.
http://www.workrave.com/download/snapshots/20090127/workrave-win32-v1_9-20090127-installer.exe
Networking (add host) is broken in this build. If you do not want to install this build over your current build, you can use Universal Extractor to extract the installer files and run workrave.exe from the {app}\lib directory.
http://download.c1pher.com/uniextract16.exe
File hashes:
10507480,1096feda12b57aa68726728ac25d4a43,e23005fb2702855abc09f683899bfef531719e872a1cc2d5604934f4e0f8d03d,workrave-win32-v1_9-20090127-installer.exe
5222759,bd504eb40f1cfdd64bdeee246e45843d,ccc9e2c19ec3b41388a3fa93fa6a462fde69e16736637052dddce398d949a85b,uniextract16.exe
If you do not have a hash utility use sigcheck (digitally signed by microsoft) or md5deep/hashdeep.
Thanks,
RayComment 18
Akop Feb 4 2009 19:42:34 UTC
Will do, thanks very much.
Comment 19
Akop Feb 6 2009 19:14:09 UTC
I've been running the fix for the last 2-3 days, and so far, no timer freeze. If all works well, I'll try posting again in a week (I'll post for sure if I experience the freeze again :)
Comment 20
Akop Feb 10 2009 18:10:40 UTC
Indeed, the fix seems to have worked. The only issue is that occasionally (twice, so far) WorkRave exited unexpectedly.
Comment 21
Ray Satiro Feb 10 2009 21:13:46 UTC
Exited unexpectedly?
Comment 22
Akop Feb 10 2009 22:15:02 UTC
Perhaps 'crashed' is a better description :) I don't get the usual Windows dialog about a program crashing, but Workrave's window basically disappears. The systray icon stays, but if I mouse over it, it also disappears. When I restart WorkRave, things continue as usual.
Comment 23
Ray Satiro Feb 12 2009 23:07:47 UTC
Closing as FIXED. I have received enough feedback to close. The fix will be incorporated in the next release. Thanks to all of you who reported, it made a big difference in resolving this issue.