From a8b718b824a443dbe4a9e4cadc11561473de8e17 Mon Sep 17 00:00:00 2001 From: Giuseppe Bilotta Date: Thu, 30 Sep 2010 12:08:34 +0200 Subject: Revert "markov: removed unnecessary mutexes" This reverts commit 06485aeb187dde5e81204b06c8e956e7e035c323. The mutex is necessary because of the concurrent learning and database conversion. Some other approach should be used instead (e.g. skipping the mutex if not running a conversion). --- data/rbot/plugins/markov.rb | 44 +++++++++++++++++++++++++------------------- 1 file 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 -- cgit v1.2.3