- From: Harald Alvestrand <harald@alvestrand.no>
- Date: Fri, 15 May 2015 10:21:22 +0200
- To: Jan-Ivar Bruaroey <jib@mozilla.com>, Martin Thomson <martin.thomson@gmail.com>
- CC: "public-webrtc@w3.org" <public-webrtc@w3.org>
Den 14. mai 2015 03:46, skrev Jan-Ivar Bruaroey: > On 5/13/15 3:36 PM, Martin Thomson wrote: >> On 13 May 2015 at 11:38, Harald Alvestrand <harald@alvestrand.no> wrote: >>>> Think about the following: >>>> >>>> pc.setRemoteDescription(offer) >>>> pc.addTrack(X); >>>> pc.createAnswer().then(answer => { ... }); >>>> pc.addTrack(Y); >>>> >>>> If code like this exists, then I think we need to have it fail >>>> (because the state of the PC at the time that createAnswer is called >>>> is not correct). Then we get the sort of cleanliness that you are >>>> looking for. >>>> >>>> (We only get in this sticky situation because we carry state between >>>> operations implicitly.) >>> I'm not sure what you're saying here - to me it seems that >>> createAnswer() is clearly called between pc.addtrack(X) and >>> pc.addTrack(Y), but we don't have a description of when the .then task >>> of createAnswer() (and thus the ... part) is called. >>> >>> Care to clarify? >> This code is currently safe, and I know that people do exactly this. >> But it only works because createAnswer is enqueued behind >> setRemoteDescription: createAnswer doesn't actually get executed until >> setRemoteDescription completes. > > Right. > > 1. setRemoteDescription is called > 2. Track X is added > 3. createAnswer is chained (not called) > 4. Track Y is added > 5. setRemoteDescription completes > 6. createAnswer is called > 7. createAnswer completes > > > Which explains why Track Y gets included in this corner-case. > > We can: > > 1. Outlaw it > 2. Complicate chain (put createAnswer(X and whatelse) on it) > 3. Leave it > 4. Always chain (make non-corner cases take Track Y as well) 5. Define that createAnswer's execution model is that it clones the track list and chains a function innerCreateAnswer(trackListClone) that does what the user expects given when createAnswer is called, rather than itself being chained. > > > Tightening up the processing models of createOffer and createAnswer to > not race with JS is a separate issue. > > .: Jan-Ivar :. >
Received on Friday, 15 May 2015 08:21:54 UTC