diff options
| author | Michael Sevakis <jethead71@rockbox.org> | 2008-03-12 02:50:07 +0000 |
|---|---|---|
| committer | Michael Sevakis <jethead71@rockbox.org> | 2008-03-12 02:50:07 +0000 |
| commit | 2f5a37de5c45333453169ffe0b90e0f380d1cd50 (patch) | |
| tree | db693867f6a04bf0443a74b1bfc64fe15404f3cd /firmware | |
| parent | d80246fac010002606d936f6a38057cfa108d172 (diff) | |
| download | rockbox-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.c | 9 |
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: |