diff --git a/memdb_iterator.go b/memdb_iterator.go index 8288809..c248ed2 100644 --- a/memdb_iterator.go +++ b/memdb_iterator.go @@ -3,6 +3,9 @@ package db import ( "bytes" "context" + "fmt" + "runtime/debug" + "time" "github.com/google/btree" ) @@ -45,6 +48,7 @@ func newMemDBIteratorMtxChoice(db *MemDB, start []byte, end []byte, reverse bool if useMtx { db.mtx.RLock() } + callingStack := debug.Stack() go func() { if useMtx { defer db.mtx.RUnlock() @@ -64,11 +68,15 @@ func newMemDBIteratorMtxChoice(db *MemDB, start []byte, end []byte, reverse bool if abortLessThan != nil && bytes.Compare(item.key, abortLessThan) == -1 { return false } - select { - case <-ctx.Done(): - return false - case ch <- &item: - return true + for { + select { + case <-ctx.Done(): + return false + case ch <- &item: + return true + case <-time.After(10 * time.Second): + fmt.Printf("TMDBTEST stuck channel called by %s\n", callingStack) + } } } switch {