diff options
| author | Miika Pekkarinen <miipekk@ihme.org> | 2005-06-14 14:36:46 +0000 |
|---|---|---|
| committer | Miika Pekkarinen <miipekk@ihme.org> | 2005-06-14 14:36:46 +0000 |
| commit | ef72f996814301fc0ed9cc358f620e67a81486f7 (patch) | |
| tree | 1f866cd2931eb8fff7f0e904934d13f5d49b2a81 | |
| parent | 58c71e0e366c174fd6f71446758fe311e68f4bee (diff) | |
| download | rockbox-ef72f996814301fc0ed9cc358f620e67a81486f7.zip rockbox-ef72f996814301fc0ed9cc358f620e67a81486f7.tar.gz rockbox-ef72f996814301fc0ed9cc358f620e67a81486f7.tar.bz2 rockbox-ef72f996814301fc0ed9cc358f620e67a81486f7.tar.xz | |
Fixed a dead lock, file handle leak that caused wps to jam and
selected a smaller i2c timeout value.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6707 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/playback.c | 12 | ||||
| -rw-r--r-- | apps/plugin.c | 8 | ||||
| -rw-r--r-- | firmware/export/i2c-h100.h | 2 | ||||
| -rw-r--r-- | firmware/pcm_playback.c | 2 |
4 files changed, 13 insertions, 11 deletions
diff --git a/apps/playback.c b/apps/playback.c index cda67ac..7ef4f7b 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -463,8 +463,6 @@ void audio_fill_file_buffer(void) if (!queue_empty(&audio_queue)) { logf("Filling interrupted"); - //close(current_fd); - //current_fd = -1; return ; } @@ -1002,6 +1000,11 @@ bool audio_load_track(int offset, bool start_play, int peek_offset) tracks[track_widx].filepos = i; + if (current_fd >= 0) { + close(current_fd); + current_fd = -1; + } + /* Leave the file handle open for faster buffer refill. */ if (tracks[track_widx].filerem != 0) { current_fd = fd; @@ -1010,7 +1013,6 @@ bool audio_load_track(int offset, bool start_play, int peek_offset) } else { logf("Completely buf."); close(fd); - current_fd = -1; if (++track_widx >= MAX_TRACK) { track_widx = 0; } @@ -1485,10 +1487,6 @@ void audio_next(void) ci.stop_codec = true; playlist_next(1); queue_post(&audio_queue, AUDIO_PLAY, 0); - } else { -#ifndef SIMULATOR - pcm_play_stop(); -#endif } } diff --git a/apps/plugin.c b/apps/plugin.c index edf32d2..46bc0df 100644 --- a/apps/plugin.c +++ b/apps/plugin.c @@ -29,6 +29,7 @@ #include "file.h" #include "kernel.h" #include "sprintf.h" +#include "logf.h" #include "screens.h" #include "misc.h" #include "mas.h" @@ -374,15 +375,18 @@ int codec_load_file(const char *plugin, void *parameter) fd = open(plugin, O_RDONLY); if (fd < 0) { snprintf(msgbuf, sizeof(msgbuf)-1, "Couldn't load codec: %s", plugin); + logf("Codec load error:%d", fd); splash(HZ*2, true, msgbuf); return fd; } rc = read(fd, &pluginbuf[0], PLUGIN_BUFFER_SIZE); - if (rc <= 0) + close(fd); + if (rc <= 0) { + logf("Codec read error"); return PLUGIN_ERROR; + } plugin_size = rc; - close(fd); return codec_load_ram(pluginbuf, plugin_size, parameter, NULL, 0); } diff --git a/firmware/export/i2c-h100.h b/firmware/export/i2c-h100.h index f8fd423..5647b50 100644 --- a/firmware/export/i2c-h100.h +++ b/firmware/export/i2c-h100.h @@ -31,7 +31,7 @@ int i2c_write(int device, unsigned char *buf, int count); void i2c_close(void); -#define MAX_LOOP 0x10000 /* TODO: select a better value */ +#define MAX_LOOP 0x100 /* TODO: select a better value */ /* PLLCR control */ #define QSPISEL (1 << 11) /* Selects QSPI or I2C interface */ diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c index 83b7b2f..d1be2a1 100644 --- a/firmware/pcm_playback.c +++ b/firmware/pcm_playback.c @@ -382,7 +382,7 @@ unsigned int audiobuffer_get_latency(void) bool pcm_is_lowdata(void) { - if (!pcm_is_playing()) + if (!pcm_is_playing() || pcm_paused) return false; if (pcmbuf_unplayed_bytes < PCM_WATERMARK) |