summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2017-02-12 20:28:53 -0500
committerFranklin Wei <git@fwei.tk>2017-02-12 20:36:31 -0500
commit0a9f71790bcad2c6ffdc96db59c446fe84336d40 (patch)
treec687ca180fa90656f528084226c0794a4c0b8869
parente4a04fa105b2e1349693b68d7088d9bbdd91d19b (diff)
downloadrockbox-0a9f71790bcad2c6ffdc96db59c446fe84336d40.tar.gz
rockbox-0a9f71790bcad2c6ffdc96db59c446fe84336d40.zip
xworld: fix several horrendous bugs
- unregisters timer on exit, preventing possible crash - disables synchronization mechanisms when used from an IRQ - prevents memory allocations from overflowing the audio buffer (unlikely) Change-Id: I3c2c4ebe93c10ca9176ed0455e7aacc2d10c059e
-rw-r--r--apps/plugins/xworld/sys.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/apps/plugins/xworld/sys.c b/apps/plugins/xworld/sys.c
index b13d4fb9ed..eac47e66f0 100644
--- a/apps/plugins/xworld/sys.c
+++ b/apps/plugins/xworld/sys.c
@@ -117,6 +117,7 @@ void exit_handler(void)
117{ 117{
118 sys_save_settings(save_sys); 118 sys_save_settings(save_sys);
119 sys_stopAudio(save_sys); 119 sys_stopAudio(save_sys);
120 rb->timer_unregister();
120#ifdef HAVE_ADJUSTABLE_CPU_FREQ 121#ifdef HAVE_ADJUSTABLE_CPU_FREQ
121 rb->cpu_boost(false); 122 rb->cpu_boost(false);
122#endif 123#endif
@@ -1114,7 +1115,8 @@ void *sys_get_buffer(struct System* sys, size_t sz)
1114 { 1115 {
1115 void* ret = sys->membuf; 1116 void* ret = sys->membuf;
1116 rb->memset(ret, 0, sz); 1117 rb->memset(ret, 0, sz);
1117 sys->membuf += sz; 1118 sys->membuf = (char*)(sys->membuf) + sz;
1119 sys->bytes_left -= sz;
1118 return ret; 1120 return ret;
1119 } 1121 }
1120 else 1122 else
@@ -1128,11 +1130,12 @@ void MutexStack(struct MutexStack_t* s, struct System *stub, void *mutex)
1128{ 1130{
1129 s->sys = stub; 1131 s->sys = stub;
1130 s->_mutex = mutex; 1132 s->_mutex = mutex;
1131 sys_lockMutex(s->sys, s->_mutex); 1133 /* FW 2017-2-12: disabled; no blocking ops in IRQ context! */
1134 /*sys_lockMutex(s->sys, s->_mutex);*/
1132} 1135}
1133 1136
1134void MutexStack_destroy(struct MutexStack_t* s) 1137void MutexStack_destroy(struct MutexStack_t* s)
1135{ 1138{
1136 sys_unlockMutex(s->sys, s->_mutex); 1139 (void) s;
1137 1140 /*sys_unlockMutex(s->sys, s->_mutex);*/
1138} 1141}