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
IdWhoWhenSizeType
171timer debug output
Ray SatiroJan 22 2009 19:27:39 UTC184650text/plain
WhoWhenWhatRemovedAdded
Rob CaelersAug 5 2008 18:34:09 UTCccRob Caelers
JohnSep 9 2008 23:03:02 UTCccjm**@ve**.com
AdamSep 30 2008 22:04:17 UTCccAdam
priorityP4P1
Ray SatiroNov 18 2008 07:04:37 UTCccRay Satiro
statusNEWASSIGNED
Ray SatiroNov 18 2008 07:27:25 UTCassigned_toRaymond PennersRay Satiro
statusASSIGNEDNEW
AkopJan 13 2009 19:42:00 UTCccAkop
Ray SatiroJan 13 2009 21:28:49 UTCstatusNEWASSIGNED
Ray SatiroFeb 12 2009 23:07:47 UTCstatusASSIGNEDRESOLVED
resolutionFIXED
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,

Ray
Comment 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.