func AcquireApplicationLockWait(appName string, owner string, reason string, timeout time.Duration) (bool, error) {
	timeoutChan := time.After(timeout)
	for {
		appLock := appTypes.AppLock{
			Locked:      true,
			Reason:      reason,
			Owner:       owner,
			AcquireDate: time.Now().In(time.UTC),
		}
		conn, err := db.Conn()
		if err != nil {
			return false, err
		}
		err = conn.Apps().Update(bson.M{"name": appName, "lock.locked": bson.M{"$in": []interface{}{false, nil}}}, bson.M{"$set": bson.M{"lock": appLock}})
		conn.Close()
		if err == nil {
			return true, nil
		}
		if err != mgo.ErrNotFound {
			return false, err
		}
		select {
		case <-timeoutChan:
			return false, nil
		case <-time.After(300 * time.Millisecond):
		}
	}
}
func AcquireApplicationLockWait(appName string, owner string, reason string, timeout time.Duration) (bool, error) {
	timeoutChan := time.After(timeout)
	for {
		appLock := appTypes.AppLock{
			Locked:      true,
			Reason:      reason,
			Owner:       owner,
			AcquireDate: time.Now().In(time.UTC),
		}
		conn, err := db.Conn()
		if err != nil {
			return false, err
		}
		err = conn.Apps().Update(bson.M{"name": appName, "lock.locked": bson.M{"$in": []interface{}{false, nil}}}, bson.M{"$set": bson.M{"lock": appLock}})
		conn.Close()
		if err == nil {
			return true, nil
		}
		if err != mgo.ErrNotFound {
			return false, err
		}
		select {
		case <-timeoutChan:
			return false, nil
		case <-time.After(300 * time.Millisecond):
		}
	}
}
func AcquireApplicationLockWait ( appName string , owner string , reason string , timeout time . Duration ) ( bool , error ) { timeoutChan := time . After ( timeout ) for { appLock := appTypes . AppLock { Locked : true , Reason : reason , Owner : owner , AcquireDate : time . Now ( ) . In ( time . UTC ) , } conn , err := db . Conn ( ) if err != nil { return false , err } err = conn . Apps ( ) . Update ( bson . M { " " : appName , " " : bson . M { " " : [ ] interface { } { false , nil } } } , bson . M { " " : bson . M { " " : appLock } } ) conn . Close ( ) if err == nil { return true , nil } if err != mgo . ErrNotFound { return false , err } select { case <- timeoutChan : return false , nil case <- time . After ( 300 * time . Millisecond ) : } } }
// Same as AcquireApplicationLock but it keeps trying to acquire the lock
// until timeout is reached.
Same as AcquireApplicationLock but it keeps trying to acquire the lock until timeout is reached .