summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-06-14 14:36:46 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-06-14 14:36:46 +0000
commitef72f996814301fc0ed9cc358f620e67a81486f7 (patch)
tree1f866cd2931eb8fff7f0e904934d13f5d49b2a81
parent58c71e0e366c174fd6f71446758fe311e68f4bee (diff)
downloadrockbox-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.c12
-rw-r--r--apps/plugin.c8
-rw-r--r--firmware/export/i2c-h100.h2
-rw-r--r--firmware/pcm_playback.c2
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)