From 7d538d465f3009c26f1acbfe6d3910dea6a8582e Mon Sep 17 00:00:00 2001 From: Ted Unangst Date: Tue, 16 Apr 2019 20:34:27 -0400 Subject: [PATCH] put a limit on how many deliveries we actually send it in parallel --- deliverator.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/deliverator.go b/deliverator.go index 2d4c60b..b9e9384 100644 --- a/deliverator.go +++ b/deliverator.go @@ -18,6 +18,7 @@ package main import ( "log" notrand "math/rand" + "sync" "time" ) @@ -54,7 +55,31 @@ func sayitagain(goarounds int, username string, rcpt string, msg []byte) { } } +var trucksout = 0 +var maxtrucksout = 10 +var garagelock sync.Mutex +var garagebell = sync.NewCond(&garagelock) + +func truckgoesout() { + garagelock.Lock() + for trucksout >= maxtrucksout { + garagebell.Wait() + } + trucksout++ + garagelock.Unlock() +} + +func truckcomesin() { + garagelock.Lock() + trucksout-- + garagebell.Broadcast() + garagelock.Unlock() +} + func deliverate(goarounds int, username string, rcpt string, msg []byte) { + truckgoesout() + defer truckcomesin() + keyname, key := ziggy(username) var inbox string // already did the box indirection