diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/buffering.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/apps/buffering.c b/apps/buffering.c index 072517fe1c..fa4bf7eef6 100644 --- a/apps/buffering.c +++ b/apps/buffering.c | |||
@@ -179,6 +179,8 @@ enum { | |||
179 | Q_SET_WATERMARK, | 179 | Q_SET_WATERMARK, |
180 | Q_SET_CHUNKSIZE, | 180 | Q_SET_CHUNKSIZE, |
181 | Q_SET_PRESEEK, | 181 | Q_SET_PRESEEK, |
182 | Q_FILL_BUFFER, /* Request that the buffering thread initiate a buffer | ||
183 | fill at its earliest convenience */ | ||
182 | }; | 184 | }; |
183 | 185 | ||
184 | /* Buffering thread */ | 186 | /* Buffering thread */ |
@@ -1083,6 +1085,9 @@ ssize_t buf_handle_offset(int handle_id) | |||
1083 | 1085 | ||
1084 | void buf_request_buffer_handle(int handle_id) | 1086 | void buf_request_buffer_handle(int handle_id) |
1085 | { | 1087 | { |
1088 | LOGFQUEUE("buffering >| buffering Q_FILL_BUFFER"); | ||
1089 | queue_send(&buffering_queue, Q_FILL_BUFFER, 0); | ||
1090 | |||
1086 | LOGFQUEUE("buffering >| buffering Q_BUFFER_HANDLE %d", handle_id); | 1091 | LOGFQUEUE("buffering >| buffering Q_BUFFER_HANDLE %d", handle_id); |
1087 | queue_send(&buffering_queue, Q_BUFFER_HANDLE, handle_id); | 1092 | queue_send(&buffering_queue, Q_BUFFER_HANDLE, handle_id); |
1088 | } | 1093 | } |
@@ -1190,14 +1195,19 @@ void buffering_thread(void) | |||
1190 | 1195 | ||
1191 | switch (ev.id) | 1196 | switch (ev.id) |
1192 | { | 1197 | { |
1193 | case Q_BUFFER_HANDLE: | 1198 | case Q_FILL_BUFFER: |
1194 | LOGFQUEUE("buffering < Q_BUFFER_HANDLE"); | 1199 | LOGFQUEUE("buffering < Q_FILL_BUFFER"); |
1195 | queue_reply(&buffering_queue, 1); | ||
1196 | /* Call buffer callbacks here because this is one of two ways | 1200 | /* Call buffer callbacks here because this is one of two ways |
1197 | * to begin a full buffer fill */ | 1201 | * to begin a full buffer fill */ |
1198 | call_buffer_low_callbacks(); | 1202 | call_buffer_low_callbacks(); |
1199 | buffer_handle((int)ev.data); | 1203 | shrink_buffer(first_handle); |
1200 | filling = true; | 1204 | filling = true; |
1205 | queue_reply(&buffering_queue, 1); | ||
1206 | break; | ||
1207 | case Q_BUFFER_HANDLE: | ||
1208 | LOGFQUEUE("buffering < Q_BUFFER_HANDLE"); | ||
1209 | queue_reply(&buffering_queue, 1); | ||
1210 | buffer_handle((int)ev.data); | ||
1201 | break; | 1211 | break; |
1202 | 1212 | ||
1203 | case Q_RESET_HANDLE: | 1213 | case Q_RESET_HANDLE: |
@@ -1292,8 +1302,10 @@ void buffering_thread(void) | |||
1292 | else if (ev.id == SYS_TIMEOUT) | 1302 | else if (ev.id == SYS_TIMEOUT) |
1293 | { | 1303 | { |
1294 | if (data_counters.remaining > 0 && | 1304 | if (data_counters.remaining > 0 && |
1295 | data_counters.useful <= conf_watermark) | 1305 | data_counters.useful <= conf_watermark) { |
1306 | shrink_buffer(first_handle); | ||
1296 | filling = fill_buffer(); | 1307 | filling = fill_buffer(); |
1308 | } | ||
1297 | } | 1309 | } |
1298 | } | 1310 | } |
1299 | } | 1311 | } |