Skip to content

Commit c2a3bba

Browse files
committed
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 38cf887 commit c2a3bba

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
@@ -166,7 +166,8 @@ static int ipc_stream_pcm_params(uint32_t stream)
166166
struct sof_ipc_comp_host *host = NULL;
167167
struct list_item elem_list;
168168
struct dma_sg_elem *elem;
169-
struct list_item *plist;
169+
struct list_item *clist;
170+
struct list_item *tlist;
170171
uint32_t ring_size;
171172
#endif
172173
struct sof_ipc_pcm_params *pcm_params = _ipc->comp_data;
@@ -232,8 +233,8 @@ static int ipc_stream_pcm_params(uint32_t stream)
232233
goto error;
233234
}
234235

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

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

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

0 commit comments

Comments
 (0)