From: Michael R. <mr...@us...> - 2004-05-26 19:49:51
|
Hi Miguel, > > If that does happen, there is a bug in the implementation of status() in > > ao_port1, because status() receives a stream and should only return true, > > when the port has been opened by that stream. (The commentaries for > > status() in audio_out.h and video_out.h reflect that.) > > ok, i didn't noticed that. in that case it should work, although we > must take care of maintaining the stream values consistent for all > post plugins. > > what if i first rewire post into stream1 > 1) stream1 -> audio_post -> ao_port1 > > and then rewire it to ao_port2 and no input (in two steps). > 2) stream1 -> ao_port1 > > that is, ao_port1 is opened and audio_post closed. is it safe? won't > audio_post try to close ao_port1? remember audio_post still has its > output wired to the same ao_port1. When stream1 closes audio_post, it also closes ao_port1 and then, because of the rewire, will reopen ao_port1 using the values it opened audio_post with. Because audio_post is closed now, its stream is set to NULL. > 3) audio_post -> ao_port2 > > so audio_post won't neither try to close previous port (ao_port1) > because status will return false for stream "none", nor open the > ao_port2. right? Right. Since ao_port1 is not opened for the NULL stream (no port is), audio_post rewiring does not open or close anything. Result: audio_post and ao_port2 are not opened, ao_port1 is opened once by stream1. So it should work unless we forgot something. > > Our current implementation of the status() functions is wrong here, > > because the NULL value for the stream has two meanings: > > * no stream => status() should fail > > * an anonymous stream => status() should succeed > > I think an engine global define for an anonymous stream would be a good > > solution. What do you think? > > sounds good. I will implement this on Friday. (Maybe even tomorrow, but Friday is more likely.) Michael -- /* Thanks to Rob `CmdrTaco' Malda for not influencing this code in any * way. */ 2.4.3 linux/net/core/netfilter.c |