Skip to content

Commit 1ff4a9d

Browse files
RanderWangxiulipan
authored andcommitted
playback: kill a infinite loop in pcm_param
Don't delete item with list_for_item. with list_for_item, a item is deleted from list but the next of this item is used to visit the list. Signed-off-by: Rander Wang <rander.wang@linux.intel.com>
1 parent bc96f88 commit 1ff4a9d

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

src/ipc/handler.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,8 @@ static int ipc_stream_pcm_params(uint32_t stream)
167167
struct sof_ipc_comp_host *host = NULL;
168168
struct list_item elem_list;
169169
struct dma_sg_elem *elem;
170-
struct list_item *plist;
170+
struct list_item *clist;
171+
struct list_item *tlist;
171172
uint32_t ring_size;
172173
#endif
173174
struct sof_ipc_pcm_params *pcm_params = _ipc->comp_data;
@@ -233,8 +234,8 @@ static int ipc_stream_pcm_params(uint32_t stream)
233234
goto error;
234235
}
235236

236-
list_for_item(plist, &elem_list) {
237-
elem = container_of(plist, struct dma_sg_elem, list);
237+
list_for_item_safe(clist, tlist, &elem_list) {
238+
elem = container_of(clist, struct dma_sg_elem, list);
238239

239240
err = comp_host_buffer(cd, elem, ring_size);
240241
if (err < 0) {
@@ -279,8 +280,8 @@ static int ipc_stream_pcm_params(uint32_t stream)
279280

280281
error:
281282
#ifdef CONFIG_HOST_PTABLE
282-
list_for_item(plist, &elem_list) {
283-
elem = container_of(plist, struct dma_sg_elem, list);
283+
list_for_item_safe(clist, tlist, &elem_list) {
284+
elem = container_of(clist, struct dma_sg_elem, list);
284285
list_item_del(&elem->list);
285286
rfree(elem);
286287
}

0 commit comments

Comments
 (0)