// 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. package ogle import ( "os"; "runtime"; ) // An aborter aborts the thread's current compututation, usually // passing the error to a waiting thread. type aborter interface { Abort(err os.Error); } type ogleAborter chan os.Error; func (a ogleAborter) Abort(err os.Error) { a <- err; runtime.Goexit(); } // try executes a computation; if the computation Aborts, try returns // the error passed to abort. func try(f func(a aborter)) os.Error { a := make(ogleAborter); go func() { f(a); a <- nil; }(); err := <-a; return err; }