FS#10723 - Rockbox hangs or panics while trying to clear settings on boot

Attached to Project: Rockbox
Opened by Michael Chicoine (mc2739) - Sunday, 25 October 2009, 22:40 GMT
Last edited by Michael Chicoine (mc2739) - Thursday, 05 November 2009, 03:48 GMT
Task Type Bugs
Category User Interface
Status Closed
Assigned To No-one
Operating System All players
Severity Low
Priority Normal
Reported Version Daily build (which?)
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 0
Private No


This bug was introduced with r23258 (works with r23257)

Steps to reproduce
1. hold record button while powering on
2. e280 locks up while displaying the verbose bootloader screen.

I commented the splashf() on line 538 in apps/main.c and it did not lock and did reset the settings.
This task depends upon

Closed by  Michael Chicoine (mc2739)
Thursday, 05 November 2009, 03:48 GMT
Reason for closing:  Fixed
Additional comments about closing:  This was fixed in r23507
Comment by Michael Chicoine (mc2739) - Sunday, 01 November 2009, 22:35 GMT
I can also reproduce this on my e260v2, although instead of hanging, it gets a data abort at 300265f8. According to the file, this address is in find_viewport in skin_parser.o
Comment by Michael Chicoine (mc2739) - Wednesday, 04 November 2009, 04:17 GMT
Here are my findings so far in trying to track this down using r23258:
NOTE: this may not be accurate for current svn.

1. apps/main.c line 536 calls splash()
2. apps/gui/splash.c line 225 calls splashf()
3. apps/gui/splash.c line 208 calls splash_internal()
4. apps/gui/splash.c line 64 calls viewport_set_defaults()
5. apps/gui/viewport.c line 170 calls viewport_set_fullscreen()
6. apps/gui/viewport.c line 116 calls sb_skin_get_info_vp()

I think this is where the problem is, sb_skin_init() has not yet been called and we are calling sb_skin_get_info_vp().

To test if this was the case, I set a bool if the settings cleared, moved the splash() after sb_skin_init() and used to bool to determine whether or not to splash the message. This worked properly.

At this point, I do not know the best way to fix this issue. Moving the splash works, but a warning would also need to be added stating that splash should not be used before sb_skin_init(). The more proper fix might be for sb_skin_get_info_vp() to know that sb_skin_init() has not happened yet and just return the standard fullscreen viewport.