diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/buffering.c | 4 | ||||
-rw-r--r-- | apps/codec_thread.c | 6 | ||||
-rw-r--r-- | apps/mpeg.c | 2 | ||||
-rw-r--r-- | apps/playlist.c | 37 | ||||
-rw-r--r-- | apps/playlist.h | 2 | ||||
-rw-r--r-- | apps/plugins/battery_bench.c | 2 | ||||
-rw-r--r-- | apps/plugins/mikmod/mikmod.c | 2 | ||||
-rw-r--r-- | apps/tagcache.c | 4 |
8 files changed, 33 insertions, 26 deletions
diff --git a/apps/buffering.c b/apps/buffering.c index cbc47c63e7..54c6c05baa 100644 --- a/apps/buffering.c +++ b/apps/buffering.c | |||
@@ -176,8 +176,8 @@ static void buffering_thread(void); | |||
176 | static long buffering_stack[(DEFAULT_STACK_SIZE + 0x2000)/sizeof(long)]; | 176 | static long buffering_stack[(DEFAULT_STACK_SIZE + 0x2000)/sizeof(long)]; |
177 | static const char buffering_thread_name[] = "buffering"; | 177 | static const char buffering_thread_name[] = "buffering"; |
178 | static unsigned int buffering_thread_id = 0; | 178 | static unsigned int buffering_thread_id = 0; |
179 | static struct event_queue buffering_queue; | 179 | static struct event_queue buffering_queue SHAREDBSS_ATTR; |
180 | static struct queue_sender_list buffering_queue_sender_list; | 180 | static struct queue_sender_list buffering_queue_sender_list SHAREDBSS_ATTR; |
181 | 181 | ||
182 | 182 | ||
183 | 183 | ||
diff --git a/apps/codec_thread.c b/apps/codec_thread.c index ef02f70811..03ab5622e2 100644 --- a/apps/codec_thread.c +++ b/apps/codec_thread.c | |||
@@ -81,15 +81,15 @@ extern bool automatic_skip; /* Who initiated in-progress skip? (C/A-) */ | |||
81 | */ | 81 | */ |
82 | static bool codec_requested_stop = false; | 82 | static bool codec_requested_stop = false; |
83 | 83 | ||
84 | extern struct event_queue audio_queue; | 84 | extern struct event_queue audio_queue SHAREDBSS_ATTR; |
85 | extern struct event_queue codec_queue; | 85 | extern struct event_queue codec_queue SHAREDBSS_ATTR; |
86 | 86 | ||
87 | extern struct codec_api ci; /* from codecs.c */ | 87 | extern struct codec_api ci; /* from codecs.c */ |
88 | 88 | ||
89 | /* Codec thread */ | 89 | /* Codec thread */ |
90 | unsigned int codec_thread_id; /* For modifying thread priority later. | 90 | unsigned int codec_thread_id; /* For modifying thread priority later. |
91 | Used by playback.c and pcmbuf.c */ | 91 | Used by playback.c and pcmbuf.c */ |
92 | static struct queue_sender_list codec_queue_sender_list; | 92 | static struct queue_sender_list codec_queue_sender_list SHAREDBSS_ATTR; |
93 | static long codec_stack[(DEFAULT_STACK_SIZE + 0x2000)/sizeof(long)] | 93 | static long codec_stack[(DEFAULT_STACK_SIZE + 0x2000)/sizeof(long)] |
94 | IBSS_ATTR; | 94 | IBSS_ATTR; |
95 | static const char codec_thread_name[] = "codec"; | 95 | static const char codec_thread_name[] = "codec"; |
diff --git a/apps/mpeg.c b/apps/mpeg.c index bdca92048f..690e530d9b 100644 --- a/apps/mpeg.c +++ b/apps/mpeg.c | |||
@@ -150,7 +150,7 @@ static char mpeg_stack[DEFAULT_STACK_SIZE]; | |||
150 | static struct mp3entry taginfo; | 150 | static struct mp3entry taginfo; |
151 | 151 | ||
152 | #else /* !SIMULATOR */ | 152 | #else /* !SIMULATOR */ |
153 | static struct event_queue mpeg_queue; | 153 | static struct event_queue mpeg_queue SHAREDBSS_ATTR; |
154 | static long mpeg_stack[(DEFAULT_STACK_SIZE + 0x1000)/sizeof(long)]; | 154 | static long mpeg_stack[(DEFAULT_STACK_SIZE + 0x1000)/sizeof(long)]; |
155 | 155 | ||
156 | static int audiobuflen; | 156 | static int audiobuflen; |
diff --git a/apps/playlist.c b/apps/playlist.c index 41d6ae5ed7..6f6db27b2a 100644 --- a/apps/playlist.c +++ b/apps/playlist.c | |||
@@ -192,11 +192,14 @@ static int rotate_index(const struct playlist_info* playlist, int index); | |||
192 | #ifdef HAVE_DIRCACHE | 192 | #ifdef HAVE_DIRCACHE |
193 | #define PLAYLIST_LOAD_POINTERS 1 | 193 | #define PLAYLIST_LOAD_POINTERS 1 |
194 | 194 | ||
195 | static struct event_queue playlist_queue; | 195 | static struct event_queue playlist_queue SHAREDBSS_ATTR; |
196 | static long playlist_stack[(DEFAULT_STACK_SIZE + 0x800)/sizeof(long)]; | 196 | static long playlist_stack[(DEFAULT_STACK_SIZE + 0x800)/sizeof(long)]; |
197 | static const char playlist_thread_name[] = "playlist cachectrl"; | 197 | static const char playlist_thread_name[] = "playlist cachectrl"; |
198 | #endif | 198 | #endif |
199 | 199 | ||
200 | static struct mutex current_playlist_mutex SHAREDBSS_ATTR; | ||
201 | static struct mutex created_playlist_mutex SHAREDBSS_ATTR; | ||
202 | |||
200 | /* Check if the filename suggests M3U or M3U8 format. */ | 203 | /* Check if the filename suggests M3U or M3U8 format. */ |
201 | static bool is_m3u8(const char* filename) | 204 | static bool is_m3u8(const char* filename) |
202 | { | 205 | { |
@@ -1232,9 +1235,9 @@ static void playlist_flush_callback(void *param) | |||
1232 | { | 1235 | { |
1233 | if (playlist->num_cached > 0) | 1236 | if (playlist->num_cached > 0) |
1234 | { | 1237 | { |
1235 | mutex_lock(&playlist->control_mutex); | 1238 | mutex_lock(playlist->control_mutex); |
1236 | flush_cached_control(playlist); | 1239 | flush_cached_control(playlist); |
1237 | mutex_unlock(&playlist->control_mutex); | 1240 | mutex_unlock(playlist->control_mutex); |
1238 | } | 1241 | } |
1239 | sync_control(playlist, true); | 1242 | sync_control(playlist, true); |
1240 | } | 1243 | } |
@@ -1362,7 +1365,7 @@ static int get_filename(struct playlist_info* playlist, int index, int seek, | |||
1362 | } | 1365 | } |
1363 | else if (max < 0) | 1366 | else if (max < 0) |
1364 | { | 1367 | { |
1365 | mutex_lock(&playlist->control_mutex); | 1368 | mutex_lock(playlist->control_mutex); |
1366 | 1369 | ||
1367 | if (control_file) | 1370 | if (control_file) |
1368 | { | 1371 | { |
@@ -1396,7 +1399,7 @@ static int get_filename(struct playlist_info* playlist, int index, int seek, | |||
1396 | } | 1399 | } |
1397 | } | 1400 | } |
1398 | 1401 | ||
1399 | mutex_unlock(&playlist->control_mutex); | 1402 | mutex_unlock(playlist->control_mutex); |
1400 | 1403 | ||
1401 | if (max < 0) | 1404 | if (max < 0) |
1402 | { | 1405 | { |
@@ -1829,7 +1832,7 @@ static int update_control(struct playlist_info* playlist, | |||
1829 | struct playlist_control_cache* cache; | 1832 | struct playlist_control_cache* cache; |
1830 | bool flush = false; | 1833 | bool flush = false; |
1831 | 1834 | ||
1832 | mutex_lock(&playlist->control_mutex); | 1835 | mutex_lock(playlist->control_mutex); |
1833 | 1836 | ||
1834 | cache = &(playlist->control_cache[playlist->num_cached++]); | 1837 | cache = &(playlist->control_cache[playlist->num_cached++]); |
1835 | 1838 | ||
@@ -1861,7 +1864,7 @@ static int update_control(struct playlist_info* playlist, | |||
1861 | if (flush || playlist->num_cached == PLAYLIST_MAX_CACHE) | 1864 | if (flush || playlist->num_cached == PLAYLIST_MAX_CACHE) |
1862 | result = flush_cached_control(playlist); | 1865 | result = flush_cached_control(playlist); |
1863 | 1866 | ||
1864 | mutex_unlock(&playlist->control_mutex); | 1867 | mutex_unlock(playlist->control_mutex); |
1865 | 1868 | ||
1866 | return result; | 1869 | return result; |
1867 | } | 1870 | } |
@@ -1881,10 +1884,10 @@ static void sync_control(struct playlist_info* playlist, bool force) | |||
1881 | { | 1884 | { |
1882 | if (playlist->pending_control_sync) | 1885 | if (playlist->pending_control_sync) |
1883 | { | 1886 | { |
1884 | mutex_lock(&playlist->control_mutex); | 1887 | mutex_lock(playlist->control_mutex); |
1885 | fsync(playlist->control_fd); | 1888 | fsync(playlist->control_fd); |
1886 | playlist->pending_control_sync = false; | 1889 | playlist->pending_control_sync = false; |
1887 | mutex_unlock(&playlist->control_mutex); | 1890 | mutex_unlock(playlist->control_mutex); |
1888 | } | 1891 | } |
1889 | } | 1892 | } |
1890 | } | 1893 | } |
@@ -1908,6 +1911,9 @@ void playlist_init(void) | |||
1908 | { | 1911 | { |
1909 | struct playlist_info* playlist = ¤t_playlist; | 1912 | struct playlist_info* playlist = ¤t_playlist; |
1910 | 1913 | ||
1914 | mutex_init(¤t_playlist_mutex); | ||
1915 | mutex_init(&created_playlist_mutex); | ||
1916 | |||
1911 | playlist->current = true; | 1917 | playlist->current = true; |
1912 | strlcpy(playlist->control_filename, PLAYLIST_CONTROL_FILE, | 1918 | strlcpy(playlist->control_filename, PLAYLIST_CONTROL_FILE, |
1913 | sizeof(playlist->control_filename)); | 1919 | sizeof(playlist->control_filename)); |
@@ -1919,7 +1925,8 @@ void playlist_init(void) | |||
1919 | playlist->buffer_size = | 1925 | playlist->buffer_size = |
1920 | AVERAGE_FILENAME_LENGTH * global_settings.max_files_in_dir; | 1926 | AVERAGE_FILENAME_LENGTH * global_settings.max_files_in_dir; |
1921 | playlist->buffer = buffer_alloc(playlist->buffer_size); | 1927 | playlist->buffer = buffer_alloc(playlist->buffer_size); |
1922 | mutex_init(&playlist->control_mutex); | 1928 | playlist->control_mutex = ¤t_playlist_mutex; |
1929 | |||
1923 | empty_playlist(playlist, true); | 1930 | empty_playlist(playlist, true); |
1924 | 1931 | ||
1925 | #ifdef HAVE_DIRCACHE | 1932 | #ifdef HAVE_DIRCACHE |
@@ -1943,14 +1950,14 @@ void playlist_shutdown(void) | |||
1943 | 1950 | ||
1944 | if (playlist->control_fd >= 0) | 1951 | if (playlist->control_fd >= 0) |
1945 | { | 1952 | { |
1946 | mutex_lock(&playlist->control_mutex); | 1953 | mutex_lock(playlist->control_mutex); |
1947 | 1954 | ||
1948 | if (playlist->num_cached > 0) | 1955 | if (playlist->num_cached > 0) |
1949 | flush_cached_control(playlist); | 1956 | flush_cached_control(playlist); |
1950 | 1957 | ||
1951 | close(playlist->control_fd); | 1958 | close(playlist->control_fd); |
1952 | 1959 | ||
1953 | mutex_unlock(&playlist->control_mutex); | 1960 | mutex_unlock(playlist->control_mutex); |
1954 | } | 1961 | } |
1955 | } | 1962 | } |
1956 | 1963 | ||
@@ -2705,7 +2712,7 @@ int playlist_create_ex(struct playlist_info* playlist, | |||
2705 | 2712 | ||
2706 | playlist->buffer_size = 0; | 2713 | playlist->buffer_size = 0; |
2707 | playlist->buffer = NULL; | 2714 | playlist->buffer = NULL; |
2708 | mutex_init(&playlist->control_mutex); | 2715 | playlist->control_mutex = &created_playlist_mutex; |
2709 | } | 2716 | } |
2710 | 2717 | ||
2711 | new_playlist(playlist, dir, file); | 2718 | new_playlist(playlist, dir, file); |
@@ -3441,7 +3448,7 @@ int playlist_save(struct playlist_info* playlist, char *filename) | |||
3441 | { | 3448 | { |
3442 | result = -1; | 3449 | result = -1; |
3443 | 3450 | ||
3444 | mutex_lock(&playlist->control_mutex); | 3451 | mutex_lock(playlist->control_mutex); |
3445 | 3452 | ||
3446 | /* Replace the current playlist with the new one and update indices */ | 3453 | /* Replace the current playlist with the new one and update indices */ |
3447 | close(playlist->fd); | 3454 | close(playlist->fd); |
@@ -3471,7 +3478,7 @@ int playlist_save(struct playlist_info* playlist, char *filename) | |||
3471 | } | 3478 | } |
3472 | } | 3479 | } |
3473 | 3480 | ||
3474 | mutex_unlock(&playlist->control_mutex); | 3481 | mutex_unlock(playlist->control_mutex); |
3475 | 3482 | ||
3476 | } | 3483 | } |
3477 | 3484 | ||
diff --git a/apps/playlist.h b/apps/playlist.h index fb30b7ac8c..9c45769981 100644 --- a/apps/playlist.h +++ b/apps/playlist.h | |||
@@ -105,7 +105,7 @@ struct playlist_info | |||
105 | int num_cached; /* number of cached entries */ | 105 | int num_cached; /* number of cached entries */ |
106 | bool pending_control_sync; /* control file needs to be synced */ | 106 | bool pending_control_sync; /* control file needs to be synced */ |
107 | 107 | ||
108 | struct mutex control_mutex; /* mutex for control file access */ | 108 | struct mutex *control_mutex; /* mutex for control file access */ |
109 | int last_shuffled_start; /* number of tracks when insert last | 109 | int last_shuffled_start; /* number of tracks when insert last |
110 | shuffled command start */ | 110 | shuffled command start */ |
111 | }; | 111 | }; |
diff --git a/apps/plugins/battery_bench.c b/apps/plugins/battery_bench.c index 044db9ff1f..6a0493ceaa 100644 --- a/apps/plugins/battery_bench.c +++ b/apps/plugins/battery_bench.c | |||
@@ -266,7 +266,7 @@ static struct batt_info | |||
266 | #define BUF_ELEMENTS (sizeof(bat)/sizeof(struct batt_info)) | 266 | #define BUF_ELEMENTS (sizeof(bat)/sizeof(struct batt_info)) |
267 | 267 | ||
268 | static unsigned int thread_id; | 268 | static unsigned int thread_id; |
269 | static struct event_queue thread_q; | 269 | static struct event_queue thread_q SHAREDBSS_ATTR; |
270 | static bool in_usb_mode; | 270 | static bool in_usb_mode; |
271 | static unsigned int buf_idx; | 271 | static unsigned int buf_idx; |
272 | 272 | ||
diff --git a/apps/plugins/mikmod/mikmod.c b/apps/plugins/mikmod/mikmod.c index fe1768376e..c99d11d636 100644 --- a/apps/plugins/mikmod/mikmod.c +++ b/apps/plugins/mikmod/mikmod.c | |||
@@ -31,7 +31,7 @@ | |||
31 | #define EV_EXIT 9999 | 31 | #define EV_EXIT 9999 |
32 | #define THREAD_STACK_SIZE DEFAULT_STACK_SIZE + 0x200 | 32 | #define THREAD_STACK_SIZE DEFAULT_STACK_SIZE + 0x200 |
33 | static unsigned int thread_id; | 33 | static unsigned int thread_id; |
34 | static struct event_queue thread_q; | 34 | static struct event_queue thread_q SHAREDBSS_ATTR; |
35 | /* use long for aligning */ | 35 | /* use long for aligning */ |
36 | unsigned long thread_stack[THREAD_STACK_SIZE/sizeof(long)]; | 36 | unsigned long thread_stack[THREAD_STACK_SIZE/sizeof(long)]; |
37 | #endif | 37 | #endif |
diff --git a/apps/tagcache.c b/apps/tagcache.c index ae7199ffd6..ea7768139b 100644 --- a/apps/tagcache.c +++ b/apps/tagcache.c | |||
@@ -96,7 +96,7 @@ | |||
96 | 96 | ||
97 | #ifndef __PCTOOL__ | 97 | #ifndef __PCTOOL__ |
98 | /* Tag Cache thread. */ | 98 | /* Tag Cache thread. */ |
99 | static struct event_queue tagcache_queue; | 99 | static struct event_queue tagcache_queue SHAREDBSS_ATTR; |
100 | static long tagcache_stack[(DEFAULT_STACK_SIZE + 0x4000)/sizeof(long)]; | 100 | static long tagcache_stack[(DEFAULT_STACK_SIZE + 0x4000)/sizeof(long)]; |
101 | static const char tagcache_thread_name[] = "tagcache"; | 101 | static const char tagcache_thread_name[] = "tagcache"; |
102 | #endif | 102 | #endif |
@@ -159,7 +159,7 @@ struct tagcache_command_entry { | |||
159 | static struct tagcache_command_entry command_queue[TAGCACHE_COMMAND_QUEUE_LENGTH]; | 159 | static struct tagcache_command_entry command_queue[TAGCACHE_COMMAND_QUEUE_LENGTH]; |
160 | static volatile int command_queue_widx = 0; | 160 | static volatile int command_queue_widx = 0; |
161 | static volatile int command_queue_ridx = 0; | 161 | static volatile int command_queue_ridx = 0; |
162 | static struct mutex command_queue_mutex; | 162 | static struct mutex command_queue_mutex SHAREDBSS_ATTR; |
163 | #endif | 163 | #endif |
164 | 164 | ||
165 | /* Tag database structures. */ | 165 | /* Tag database structures. */ |