summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2008-03-12 02:50:07 +0000
committerMichael Sevakis <jethead71@rockbox.org>2008-03-12 02:50:07 +0000
commit2f5a37de5c45333453169ffe0b90e0f380d1cd50 (patch)
treedb693867f6a04bf0443a74b1bfc64fe15404f3cd /firmware
parentd80246fac010002606d936f6a38057cfa108d172 (diff)
downloadrockbox-2f5a37de5c45333453169ffe0b90e0f380d1cd50.zip
rockbox-2f5a37de5c45333453169ffe0b90e0f380d1cd50.tar.gz
rockbox-2f5a37de5c45333453169ffe0b90e0f380d1cd50.tar.bz2
rockbox-2f5a37de5c45333453169ffe0b90e0f380d1cd50.tar.xz
Fix newly introduced race condition in SD driver. Make sure to force remount in case two SYS_HOTSWAP_INSERTED messages are received in a row. Be sure flags are reset to re-initialize the SD-card. Go back to locking out driver access during disk mount/unmount attempts.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16635 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/target/arm/sandisk/ata-c200_e200.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/firmware/target/arm/sandisk/ata-c200_e200.c b/firmware/target/arm/sandisk/ata-c200_e200.c
index 7a4328d..150b08f 100644
--- a/firmware/target/arm/sandisk/ata-c200_e200.c
+++ b/firmware/target/arm/sandisk/ata-c200_e200.c
@@ -1045,13 +1045,22 @@ static void sd_thread(void)
{
#ifdef HAVE_HOTSWAP
case SYS_HOTSWAP_INSERTED:
+ mutex_lock(&sd_mtx); /* Lock-out card activity */
+ card_info[1].initialized = 0;
+ sd_status[1].retry = 0;
+ disk_unmount(1); /* Force remount */
disk_mount(1); /* mount microSD card */
queue_broadcast(SYS_FS_CHANGED, 0);
+ mutex_unlock(&sd_mtx);
break;
case SYS_HOTSWAP_EXTRACTED:
+ mutex_lock(&sd_mtx); /* Lock-out card activity */
+ card_info[1].initialized = 0;
+ sd_status[1].retry = 0;
disk_unmount(1); /* release "by force" */
queue_broadcast(SYS_FS_CHANGED, 0);
+ mutex_unlock(&sd_mtx);
break;
#endif
case SYS_TIMEOUT: