// $G $D/$F.go && $L $F.$A && ./$A.out

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// make a lot of goroutines, threaded together.
// tear them down cleanly.

package main

import (
	"os";
	"strconv";
)

func f(left, right chan int) {
	left <- <-right;
}

func main() {
	var n = 10000;
	if len(sys.Args) > 1 {
		var err *os.Error;
		n, err = strconv.Atoi(sys.Args[1]);
		if err != nil {
			print("bad arg\n");
			sys.Exit(1);
		}
	}
	leftmost := make(chan int);
	right := leftmost;
	left := leftmost;
	for i := 0; i < n; i++ {
		right = make(chan int);
		go f(left, right);
		left = right;
	}
	go func(c chan int) { c <- 1 }(right);
	<-leftmost;
}
