 
     source.notify(queue, qos: qos) {
       result in
+      if self.isDetermined { return }
+
       self.beginExecution()
-
       let now = dispatch_time(DISPATCH_TIME_NOW, 0)
       if until > now, case .Value = result
       {


    source.notify(queue, qos: qos) {
      result in
      switch result
      {
      case .Value:


    source.notify(queue, qos: qos) {
      result in
      if self.isDetermined { return }
      self.beginExecution()
      let transformed = result.map(transform)
      do { try self.setResult(transformed) }
