diff options
author | Hardeep Sidhu <dyp@pobox.com> | 2005-07-08 00:52:54 +0000 |
---|---|---|
committer | Hardeep Sidhu <dyp@pobox.com> | 2005-07-08 00:52:54 +0000 |
commit | 348d8f6bab492f46235d10eb905f724770c2f763 (patch) | |
tree | 2fde5d934810b73238bf33817fb0cdfa9a85209d | |
parent | a6abe760a9c34893135b6d5a46cfb82623e881fb (diff) | |
download | rockbox-348d8f6bab492f46235d10eb905f724770c2f763.tar.gz rockbox-348d8f6bab492f46235d10eb905f724770c2f763.zip |
A couple of bug fixes: 1. Take mutex before all playlist control file operations including fsync. 2. Don't flush and reload tracks if nothing is playing.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7060 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | apps/playlist.c | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/apps/playlist.c b/apps/playlist.c index 91ca1f640a..9a22addbc3 100644 --- a/apps/playlist.c +++ b/apps/playlist.c | |||
@@ -651,7 +651,8 @@ static int add_directory_to_playlist(struct playlist_info* playlist, | |||
651 | { | 651 | { |
652 | display_playlist_count(*count, count_str); | 652 | display_playlist_count(*count, count_str); |
653 | 653 | ||
654 | if (*count == PLAYLIST_DISPLAY_COUNT) | 654 | if (*count == PLAYLIST_DISPLAY_COUNT && |
655 | (audio_status() & AUDIO_STATUS_PLAY)) | ||
655 | audio_flush_and_reload_tracks(); | 656 | audio_flush_and_reload_tracks(); |
656 | } | 657 | } |
657 | 658 | ||
@@ -2196,8 +2197,12 @@ int playlist_insert_track(struct playlist_info* playlist, | |||
2196 | 2197 | ||
2197 | if (result != -1) | 2198 | if (result != -1) |
2198 | { | 2199 | { |
2200 | mutex_lock(&playlist->control_mutex); | ||
2199 | fsync(playlist->control_fd); | 2201 | fsync(playlist->control_fd); |
2200 | audio_flush_and_reload_tracks(); | 2202 | mutex_unlock(&playlist->control_mutex); |
2203 | |||
2204 | if (audio_status() & AUDIO_STATUS_PLAY) | ||
2205 | audio_flush_and_reload_tracks(); | ||
2201 | } | 2206 | } |
2202 | 2207 | ||
2203 | return result; | 2208 | return result; |
@@ -2232,10 +2237,15 @@ int playlist_insert_directory(struct playlist_info* playlist, | |||
2232 | 2237 | ||
2233 | result = add_directory_to_playlist(playlist, dirname, &position, queue, | 2238 | result = add_directory_to_playlist(playlist, dirname, &position, queue, |
2234 | &count, recurse); | 2239 | &count, recurse); |
2240 | |||
2241 | mutex_lock(&playlist->control_mutex); | ||
2235 | fsync(playlist->control_fd); | 2242 | fsync(playlist->control_fd); |
2243 | mutex_unlock(&playlist->control_mutex); | ||
2236 | 2244 | ||
2237 | display_playlist_count(count, count_str); | 2245 | display_playlist_count(count, count_str); |
2238 | audio_flush_and_reload_tracks(); | 2246 | |
2247 | if (audio_status() & AUDIO_STATUS_PLAY) | ||
2248 | audio_flush_and_reload_tracks(); | ||
2239 | 2249 | ||
2240 | return result; | 2250 | return result; |
2241 | } | 2251 | } |
@@ -2327,7 +2337,8 @@ int playlist_insert_playlist(struct playlist_info* playlist, char *filename, | |||
2327 | { | 2337 | { |
2328 | display_playlist_count(count, count_str); | 2338 | display_playlist_count(count, count_str); |
2329 | 2339 | ||
2330 | if (count == PLAYLIST_DISPLAY_COUNT) | 2340 | if (count == PLAYLIST_DISPLAY_COUNT && |
2341 | (audio_status() & AUDIO_STATUS_PLAY)) | ||
2331 | audio_flush_and_reload_tracks(); | 2342 | audio_flush_and_reload_tracks(); |
2332 | } | 2343 | } |
2333 | } | 2344 | } |
@@ -2337,13 +2348,18 @@ int playlist_insert_playlist(struct playlist_info* playlist, char *filename, | |||
2337 | } | 2348 | } |
2338 | 2349 | ||
2339 | close(fd); | 2350 | close(fd); |
2351 | |||
2352 | mutex_lock(&playlist->control_mutex); | ||
2340 | fsync(playlist->control_fd); | 2353 | fsync(playlist->control_fd); |
2354 | mutex_unlock(&playlist->control_mutex); | ||
2341 | 2355 | ||
2342 | if (temp_ptr) | 2356 | if (temp_ptr) |
2343 | *temp_ptr = '/'; | 2357 | *temp_ptr = '/'; |
2344 | 2358 | ||
2345 | display_playlist_count(count, count_str); | 2359 | display_playlist_count(count, count_str); |
2346 | audio_flush_and_reload_tracks(); | 2360 | |
2361 | if (audio_status() & AUDIO_STATUS_PLAY) | ||
2362 | audio_flush_and_reload_tracks(); | ||
2347 | 2363 | ||
2348 | return result; | 2364 | return result; |
2349 | } | 2365 | } |
@@ -2370,7 +2386,7 @@ int playlist_delete(struct playlist_info* playlist, int index) | |||
2370 | 2386 | ||
2371 | result = remove_track_from_playlist(playlist, index, true); | 2387 | result = remove_track_from_playlist(playlist, index, true); |
2372 | 2388 | ||
2373 | if (result != -1) | 2389 | if (result != -1 && (audio_status() & AUDIO_STATUS_PLAY)) |
2374 | audio_flush_and_reload_tracks(); | 2390 | audio_flush_and_reload_tracks(); |
2375 | 2391 | ||
2376 | return result; | 2392 | return result; |
@@ -2458,8 +2474,12 @@ int playlist_move(struct playlist_info* playlist, int index, int new_index) | |||
2458 | } | 2474 | } |
2459 | } | 2475 | } |
2460 | 2476 | ||
2477 | mutex_lock(&playlist->control_mutex); | ||
2461 | fsync(playlist->control_fd); | 2478 | fsync(playlist->control_fd); |
2462 | audio_flush_and_reload_tracks(); | 2479 | mutex_unlock(&playlist->control_mutex); |
2480 | |||
2481 | if (audio_status() & AUDIO_STATUS_PLAY) | ||
2482 | audio_flush_and_reload_tracks(); | ||
2463 | } | 2483 | } |
2464 | } | 2484 | } |
2465 | 2485 | ||
@@ -2479,7 +2499,7 @@ int playlist_randomise(struct playlist_info* playlist, unsigned int seed, | |||
2479 | 2499 | ||
2480 | result = randomise_playlist(playlist, seed, start_current, true); | 2500 | result = randomise_playlist(playlist, seed, start_current, true); |
2481 | 2501 | ||
2482 | if (result != -1) | 2502 | if (result != -1 && (audio_status() & AUDIO_STATUS_PLAY)) |
2483 | audio_flush_and_reload_tracks(); | 2503 | audio_flush_and_reload_tracks(); |
2484 | 2504 | ||
2485 | return result; | 2505 | return result; |
@@ -2497,7 +2517,7 @@ int playlist_sort(struct playlist_info* playlist, bool start_current) | |||
2497 | 2517 | ||
2498 | result = sort_playlist(playlist, start_current, true); | 2518 | result = sort_playlist(playlist, start_current, true); |
2499 | 2519 | ||
2500 | if (result != -1) | 2520 | if (result != -1 && (audio_status() & AUDIO_STATUS_PLAY)) |
2501 | audio_flush_and_reload_tracks(); | 2521 | audio_flush_and_reload_tracks(); |
2502 | 2522 | ||
2503 | return result; | 2523 | return result; |