diff --git a/mrun/mrun.go b/mrun/mrun.go index 10183c5..ffa2c57 100644 --- a/mrun/mrun.go +++ b/mrun/mrun.go @@ -30,8 +30,6 @@ package mrun import ( "context" "errors" - - "github.com/mediocregopher/mediocre-go-lib/mctx" ) type futureErr struct { @@ -105,14 +103,6 @@ var ErrDone = errors.New("Wait is done waiting") // Wait is safe to call in parallel, and will return the same result if called // multiple times. func Wait(ctx context.Context, cancelCh <-chan struct{}) error { - // First wait for all the children, and see if any of them return an error - children := mctx.Children(ctx) - for _, childCtx := range children { - if err := Wait(childCtx, cancelCh); err != nil { - return err - } - } - futErrs, _ := ctx.Value(threadCtxKey(0)).([]*futureErr) for _, futErr := range futErrs { err, ok := futErr.get(cancelCh) diff --git a/mrun/mrun_test.go b/mrun/mrun_test.go index 1fc0c11..7cd1519 100644 --- a/mrun/mrun_test.go +++ b/mrun/mrun_test.go @@ -5,8 +5,6 @@ import ( "errors" . "testing" "time" - - "github.com/mediocregopher/mediocre-go-lib/mctx" ) func TestThreadWait(t *T) { @@ -26,123 +24,56 @@ func TestThreadWait(t *T) { return err } - t.Run("noChildren", func(t *T) { - t.Run("noBlock", func(t *T) { - t.Run("noErr", func(t *T) { - ctx := context.Background() - ctx = WithThreads(ctx, 1, func() error { return nil }) - if err := Wait(ctx, nil); err != nil { - t.Fatal(err) - } - }) - - t.Run("err", func(t *T) { - ctx := context.Background() - ctx = WithThreads(ctx, 1, func() error { return testErr }) - if err := Wait(ctx, nil); err != testErr { - t.Fatalf("should have got test error, got: %v", err) - } - }) + t.Run("noBlock", func(t *T) { + t.Run("noErr", func(t *T) { + ctx := context.Background() + ctx = WithThreads(ctx, 1, func() error { return nil }) + if err := Wait(ctx, nil); err != nil { + t.Fatal(err) + } }) - t.Run("block", func(t *T) { - t.Run("noErr", func(t *T) { - ctx := context.Background() - ctx = WithThreads(ctx, 1, func() error { - time.Sleep(1 * time.Second) - return nil - }) - if err := wait(ctx, 1*time.Second); err != nil { - t.Fatal(err) - } - }) - - t.Run("err", func(t *T) { - ctx := context.Background() - ctx = WithThreads(ctx, 1, func() error { - time.Sleep(1 * time.Second) - return testErr - }) - if err := wait(ctx, 1*time.Second); err != testErr { - t.Fatalf("should have got test error, got: %v", err) - } - }) - - t.Run("canceled", func(t *T) { - ctx := context.Background() - ctx = WithThreads(ctx, 1, func() error { - time.Sleep(5 * time.Second) - return testErr - }) - if err := Wait(ctx, cancelCh(500*time.Millisecond)); err != ErrDone { - t.Fatalf("should have got ErrDone, got: %v", err) - } - }) + t.Run("err", func(t *T) { + ctx := context.Background() + ctx = WithThreads(ctx, 1, func() error { return testErr }) + if err := Wait(ctx, nil); err != testErr { + t.Fatalf("should have got test error, got: %v", err) + } }) }) - ctxWithChild := func() (context.Context, context.Context) { - ctx := context.Background() - return ctx, mctx.NewChild(ctx, "child") - } - - t.Run("children", func(t *T) { - t.Run("noBlock", func(t *T) { - t.Run("noErr", func(t *T) { - ctx, childCtx := ctxWithChild() - childCtx = WithThreads(childCtx, 1, func() error { return nil }) - ctx = mctx.WithChild(ctx, childCtx) - if err := Wait(ctx, nil); err != nil { - t.Fatal(err) - } - }) - - t.Run("err", func(t *T) { - ctx, childCtx := ctxWithChild() - childCtx = WithThreads(childCtx, 1, func() error { return testErr }) - ctx = mctx.WithChild(ctx, childCtx) - if err := Wait(ctx, nil); err != testErr { - t.Fatalf("should have got test error, got: %v", err) - } + t.Run("block", func(t *T) { + t.Run("noErr", func(t *T) { + ctx := context.Background() + ctx = WithThreads(ctx, 1, func() error { + time.Sleep(1 * time.Second) + return nil }) + if err := wait(ctx, 1*time.Second); err != nil { + t.Fatal(err) + } }) - t.Run("block", func(t *T) { - t.Run("noErr", func(t *T) { - ctx, childCtx := ctxWithChild() - childCtx = WithThreads(childCtx, 1, func() error { - time.Sleep(1 * time.Second) - return nil - }) - ctx = mctx.WithChild(ctx, childCtx) - if err := wait(ctx, 1*time.Second); err != nil { - t.Fatal(err) - } + t.Run("err", func(t *T) { + ctx := context.Background() + ctx = WithThreads(ctx, 1, func() error { + time.Sleep(1 * time.Second) + return testErr }) + if err := wait(ctx, 1*time.Second); err != testErr { + t.Fatalf("should have got test error, got: %v", err) + } + }) - t.Run("err", func(t *T) { - ctx, childCtx := ctxWithChild() - childCtx = WithThreads(childCtx, 1, func() error { - time.Sleep(1 * time.Second) - return testErr - }) - ctx = mctx.WithChild(ctx, childCtx) - if err := wait(ctx, 1*time.Second); err != testErr { - t.Fatalf("should have got test error, got: %v", err) - } - }) - - t.Run("canceled", func(t *T) { - ctx, childCtx := ctxWithChild() - childCtx = WithThreads(childCtx, 1, func() error { - time.Sleep(5 * time.Second) - return testErr - }) - ctx = mctx.WithChild(ctx, childCtx) - if err := Wait(ctx, cancelCh(500*time.Millisecond)); err != ErrDone { - t.Fatalf("should have got ErrDone, got: %v", err) - } + t.Run("canceled", func(t *T) { + ctx := context.Background() + ctx = WithThreads(ctx, 1, func() error { + time.Sleep(5 * time.Second) + return testErr }) + if err := Wait(ctx, cancelCh(500*time.Millisecond)); err != ErrDone { + t.Fatalf("should have got ErrDone, got: %v", err) + } }) }) }