put a limit on how many deliveries we actually send it in parallel
This commit is contained in:
parent
562d4e34c1
commit
7d538d465f
|
@ -18,6 +18,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
notrand "math/rand"
|
notrand "math/rand"
|
||||||
|
"sync"
|
||||||
"time"
|
"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) {
|
func deliverate(goarounds int, username string, rcpt string, msg []byte) {
|
||||||
|
truckgoesout()
|
||||||
|
defer truckcomesin()
|
||||||
|
|
||||||
keyname, key := ziggy(username)
|
keyname, key := ziggy(username)
|
||||||
var inbox string
|
var inbox string
|
||||||
// already did the box indirection
|
// already did the box indirection
|
||||||
|
|
Loading…
Reference in New Issue