Skip to content
Snippets Groups Projects
Commit 19f276af authored by capossele's avatar capossele
Browse files

:bug: fix data races on spammer

parent 963f23ec
No related branches found
No related tags found
No related merge requests found
...@@ -14,79 +14,74 @@ import ( ...@@ -14,79 +14,74 @@ import (
) )
var spamming = false var spamming = false
var spammingMutex sync.Mutex
var startMutex sync.Mutex var shutdownSignal chan struct{}
var done chan struct{}
var shutdownSignal chan int
var sentCounter = uint(0) var sentCounter = uint(0)
func Start(tps uint) { func init() {
startMutex.Lock() shutdownSignal = make(chan struct{})
done = make(chan struct{})
if !spamming { }
shutdownSignal = make(chan int, 1)
func(shutdownSignal chan int) {
daemon.BackgroundWorker("Transaction Spammer", func() {
for {
start := time.Now()
totalSentCounter := int64(0)
for {
select {
case <-daemon.ShutdownSignal:
return
case <-shutdownSignal:
return
default:
sentCounter++
totalSentCounter++
tx := value_transaction.New()
tx.SetHead(true)
tx.SetTail(true)
tx.SetValue(totalSentCounter)
tx.SetBranchTransactionHash(tipselection.GetRandomTip())
tx.SetTrunkTransactionHash(tipselection.GetRandomTip())
mtx := &pb.Transaction{Body: tx.MetaTransaction.GetBytes()}
b, _ := proto.Marshal(mtx)
gossip.Events.TransactionReceived.Trigger(&gossip.TransactionReceivedEvent{Body: b, Peer: &local.INSTANCE.Peer})
if sentCounter >= tps {
duration := time.Since(start)
if duration < time.Second {
time.Sleep(time.Second - duration)
}
start = time.Now()
sentCounter = 0 func Start(tps uint) {
} spammingMutex.Lock()
} spamming = true
spammingMutex.Unlock()
daemon.BackgroundWorker("Transaction Spammer", func() {
start := time.Now()
totalSentCounter := int64(0)
for {
select {
case <-daemon.ShutdownSignal:
return
case <-shutdownSignal:
done <- struct{}{}
return
default:
sentCounter++
totalSentCounter++
tx := value_transaction.New()
tx.SetHead(true)
tx.SetTail(true)
tx.SetValue(totalSentCounter)
tx.SetBranchTransactionHash(tipselection.GetRandomTip())
tx.SetTrunkTransactionHash(tipselection.GetRandomTip())
mtx := &pb.Transaction{Body: tx.MetaTransaction.GetBytes()}
b, _ := proto.Marshal(mtx)
gossip.Events.TransactionReceived.Trigger(&gossip.TransactionReceivedEvent{Body: b, Peer: &local.INSTANCE.Peer})
if sentCounter >= tps {
duration := time.Since(start)
if duration < time.Second {
time.Sleep(time.Second - duration)
} }
}
})
}(shutdownSignal)
spamming = true start = time.Now()
}
startMutex.Unlock() sentCounter = 0
}
}
}
})
} }
func Stop() { func Stop() {
startMutex.Lock() spammingMutex.Lock()
if spamming { if spamming {
close(shutdownSignal) shutdownSignal <- struct{}{}
// wait for spammer to be done
<-done
spamming = false spamming = false
} }
spammingMutex.Unlock()
startMutex.Unlock()
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment