We must delete from the head to the tail, the opposite of the creation
order. This stems from the fact that an stream output object "sees" the
next element, and may try to use it while being deleted.
The crash was easily reproducible with:
vlc --sout-keep --sout '#duplicate{dst=gather:std{mux=ts,dst=/dev/null}}' \
-I oldrc -vv raw_es.mp2
if(!p_first)
return;
- if(p_first != p_last)
- sout_StreamChainDelete(p_first->p_next, p_last);
+ sout_stream_t *p_next = p_first->p_next;
sout_StreamDelete(p_first);
+ if(p_first != p_last)
+ sout_StreamChainDelete(p_next, p_last);
}
/* Create a "stream_out" module, which may forward its ES to p_next module */