From f1a693c8b78c7367ea3a4e95d3c0bc922204545a Mon Sep 17 00:00:00 2001
From: Robin Ward <robin.ward@gmail.com>
Date: Thu, 15 Aug 2013 17:22:45 -0400
Subject: [PATCH] Revert "eliminate a class of v8 initialization bugs due to
 concurrency in sidekiq"

This reverts commit 883db5798b52a7dfd83bd1f42d0d7afaadac1e1b.
---
 lib/pretty_text.rb | 45 ++++++++++++++++-----------------------------
 1 file changed, 16 insertions(+), 29 deletions(-)

diff --git a/lib/pretty_text.rb b/lib/pretty_text.rb
index 4bc0f10ea62..b1329ee7f6c 100644
--- a/lib/pretty_text.rb
+++ b/lib/pretty_text.rb
@@ -77,7 +77,6 @@ module PrettyText
   end
 
   @mutex = Mutex.new
-  @ctx_init = Mutex.new
 
   def self.mention_matcher
     Regexp.new("(\@[a-zA-Z0-9_]{#{User.username_length.begin},#{User.username_length.end}})")
@@ -87,13 +86,14 @@ module PrettyText
     Rails.root
   end
 
-  def self.create_new_context
-    ctx = V8::Context.new
+  def self.v8
+    return @ctx unless @ctx.nil?
 
-    ctx["helpers"] = Helpers.new
+    @ctx = V8::Context.new
 
-    ctx_load(ctx,
-             "app/assets/javascripts/external/md5.js",
+    @ctx["helpers"] = Helpers.new
+
+    ctx_load( "app/assets/javascripts/external/md5.js",
               "app/assets/javascripts/external/lodash.js",
               "app/assets/javascripts/external/Markdown.Converter.js",
               "app/assets/javascripts/external/twitter-text-1.5.0.js",
@@ -101,40 +101,27 @@ module PrettyText
               "app/assets/javascripts/external/rsvp.js",
               Rails.configuration.ember.handlebars_location)
 
-    ctx.eval("var Discourse = {}; Discourse.SiteSettings = #{SiteSetting.client_settings_json};")
-    ctx.eval("var window = {}; window.devicePixelRatio = 2;") # hack to make code think stuff is retina
-    ctx.eval("var I18n = {}; I18n.t = function(a,b){ return helpers.t(a,b); }");
+    @ctx.eval("var Discourse = {}; Discourse.SiteSettings = #{SiteSetting.client_settings_json};")
+    @ctx.eval("var window = {}; window.devicePixelRatio = 2;") # hack to make code think stuff is retina
+    @ctx.eval("var I18n = {}; I18n.t = function(a,b){ return helpers.t(a,b); }");
 
-    ctx_load(ctx,
-              "app/assets/javascripts/discourse/components/bbcode.js",
+    ctx_load( "app/assets/javascripts/discourse/components/bbcode.js",
               "app/assets/javascripts/discourse/components/utilities.js",
               "app/assets/javascripts/discourse/components/markdown.js")
 
     # Load server side javascripts
     if DiscoursePluginRegistry.server_side_javascripts.present?
       DiscoursePluginRegistry.server_side_javascripts.each do |ssjs|
-        ctx.load(ssjs)
+        @ctx.load(ssjs)
       end
     end
 
-    ctx['quoteTemplate'] = File.open(app_root + 'app/assets/javascripts/discourse/templates/quote.js.shbrs') {|f| f.read}
-    ctx['quoteEmailTemplate'] = File.open(app_root + 'lib/assets/quote_email.js.shbrs') {|f| f.read}
-    ctx.eval("HANDLEBARS_TEMPLATES = {
+    @ctx['quoteTemplate'] = File.open(app_root + 'app/assets/javascripts/discourse/templates/quote.js.shbrs') {|f| f.read}
+    @ctx['quoteEmailTemplate'] = File.open(app_root + 'lib/assets/quote_email.js.shbrs') {|f| f.read}
+    @ctx.eval("HANDLEBARS_TEMPLATES = {
       'quote': Handlebars.compile(quoteTemplate),
       'quote_email': Handlebars.compile(quoteEmailTemplate),
      };")
-
-    ctx
-  end
-
-  def self.v8
-    return @ctx if @ctx
-
-    # ensure we only init one of these
-    @ctx_init.synchronize do
-      return @ctx if @ctx
-      @ctx = create_new_context
-    end
     @ctx
   end
 
@@ -276,9 +263,9 @@ module PrettyText
 
   protected
 
-  def self.ctx_load(ctx, *files)
+  def self.ctx_load(*files)
     files.each do |file|
-      ctx.load(app_root + file)
+      @ctx.load(app_root + file)
     end
   end