diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2017-12-09 21:57:01 -0500 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2017-12-09 21:57:01 -0500 |
commit | 8be40746b81c4fde8f990c13f1359ebbc88d048f (patch) | |
tree | 203ec54aef35ad0aa78990c25c7263b1bfc5b3b6 /apps | |
parent | 65515f32b6c1b5e32061676683549c1028e03bff (diff) | |
download | rockbox-8be40746b81c4fde8f990c13f1359ebbc88d048f.tar.gz rockbox-8be40746b81c4fde8f990c13f1359ebbc88d048f.zip |
Remove recursion from shrink_buffer()
There's no need for it any longer since the list is now doubly-
linked. As a bonus, stack limits pose no barrier to the length of
the list.
Change-Id: I41c567f946b640ef1e3c2d93da2f5aef9a763c66
Diffstat (limited to 'apps')
-rw-r--r-- | apps/buffering.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/apps/buffering.c b/apps/buffering.c index 9bc7d730c5..4b6a9d7f73 100644 --- a/apps/buffering.c +++ b/apps/buffering.c | |||
@@ -132,6 +132,9 @@ static struct mutex llist_mutex SHAREDBSS_ATTR; | |||
132 | #define HLIST_LAST \ | 132 | #define HLIST_LAST \ |
133 | HLIST_HANDLE(handle_list.tail) | 133 | HLIST_HANDLE(handle_list.tail) |
134 | 134 | ||
135 | #define HLIST_PREV(h) \ | ||
136 | HLIST_HANDLE((h)->hnode.prev) | ||
137 | |||
135 | #define HLIST_NEXT(h) \ | 138 | #define HLIST_NEXT(h) \ |
136 | HLIST_HANDLE((h)->hnode.next) | 139 | HLIST_HANDLE((h)->hnode.next) |
137 | 140 | ||
@@ -1583,21 +1586,16 @@ size_t buf_get_watermark(void) | |||
1583 | } | 1586 | } |
1584 | 1587 | ||
1585 | /** -- buffer thread helpers -- **/ | 1588 | /** -- buffer thread helpers -- **/ |
1586 | static void shrink_buffer_inner(struct memory_handle *h) | ||
1587 | { | ||
1588 | if (h == NULL) | ||
1589 | return; | ||
1590 | |||
1591 | shrink_buffer_inner(HLIST_NEXT(h)); | ||
1592 | |||
1593 | shrink_handle(h); | ||
1594 | } | ||
1595 | |||
1596 | static void shrink_buffer(void) | 1589 | static void shrink_buffer(void) |
1597 | { | 1590 | { |
1598 | logf("shrink_buffer()"); | 1591 | logf("shrink_buffer()"); |
1592 | |||
1599 | mutex_lock(&llist_mutex); | 1593 | mutex_lock(&llist_mutex); |
1600 | shrink_buffer_inner(HLIST_FIRST); | 1594 | |
1595 | for (struct memory_handle *h = HLIST_LAST; h; h = HLIST_PREV(h)) { | ||
1596 | shrink_handle(h); | ||
1597 | } | ||
1598 | |||
1601 | mutex_unlock(&llist_mutex); | 1599 | mutex_unlock(&llist_mutex); |
1602 | } | 1600 | } |
1603 | 1601 | ||