summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdata/rbot/plugins/markov.rb44
1 files changed, 25 insertions, 19 deletions
diff --git a/data/rbot/plugins/markov.rb b/data/rbot/plugins/markov.rb
index 0475ab4d..21c4d631 100755
--- a/data/rbot/plugins/markov.rb
+++ b/data/rbot/plugins/markov.rb
@@ -226,6 +226,8 @@ class MarkovPlugin < Plugin
@chains.set_default([])
@rchains = @registry.sub_registry('v2r')
@rchains.set_default([])
+ @chains_mutex = Mutex.new
+ @rchains_mutex = Mutex.new
@upgrade_queue = Queue.new
@upgrade_thread = nil
@@ -611,27 +613,31 @@ class MarkovPlugin < Plugin
def learn_triplet(word1, word2, word3)
k = "#{word1} #{word2}"
rk = "#{word2} #{word3}"
- total = 0
- hash = Hash.new(0)
- if @chains.key? k
- t2, h2 = @chains[k]
- total += t2
- hash.update h2
+ @chains_mutex.synchronize do
+ total = 0
+ hash = Hash.new(0)
+ if @chains.key? k
+ t2, h2 = @chains[k]
+ total += t2
+ hash.update h2
+ end
+ hash[word3] += 1
+ total += 1
+ @chains[k] = [total, hash]
end
- hash[word3] += 1
- total += 1
- @chains[k] = [total, hash]
- # Reverse
- total = 0
- hash = Hash.new(0)
- if @rchains.key? rk
- t2, h2 = @rchains[rk]
- total += t2
- hash.update h2
+ @rchains_mutex.synchronize do
+ # Reverse
+ total = 0
+ hash = Hash.new(0)
+ if @rchains.key? rk
+ t2, h2 = @rchains[rk]
+ total += t2
+ hash.update h2
+ end
+ hash[word1] += 1
+ total += 1
+ @rchains[rk] = [total, hash]
end
- hash[word1] += 1
- total += 1
- @rchains[rk] = [total, hash]
end