Преглед изворни кода

Merge pull request #324 from starcraftman/fix_freeze

Fix #318: Freezes on PlugInstall
Jeremy Pallats/starcraft.man пре 10 година
родитељ
комит
93d9e434a2
1 измењених фајлова са 5 додато и 15 уклоњено
  1. 5 15
      plug.vim

+ 5 - 15
plug.vim

@@ -1061,7 +1061,7 @@ endwhile
 endfunction
 
 function! s:update_python()
-let py_exe = has('python3') ? 'python3' : 'python'
+let py_exe = has('python') ? 'python' : 'python3'
 execute py_exe "<< EOF"
 """ Due to use of signals this function is POSIX only. """
 import datetime
@@ -1090,14 +1090,9 @@ G_CLONE_OPT = vim.eval('s:clone_opt')
 G_PROGRESS = vim.eval('s:progress_opt(1)')
 G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads'))
 G_STOP = thr.Event()
-G_THREADS = {}
 
 class PlugError(Exception):
-  def __init__(self, msg):
-    self._msg = msg
-  @property
-  def msg(self):
-    return self._msg
+  pass
 class CmdTimedOut(PlugError):
   pass
 class CmdFailed(PlugError):
@@ -1288,7 +1283,7 @@ class Plugin(object):
         with self.lock:
           thread_vim_command("let s:update.new['{0}'] = 1".format(self.name))
     except PlugError as exc:
-      self.write(Action.ERROR, self.name, exc.msg)
+      self.write(Action.ERROR, self.name, str(exc))
     except KeyboardInterrupt:
       G_STOP.set()
       self.write(Action.ERROR, self.name, ['Interrupted!'])
@@ -1371,10 +1366,6 @@ class PlugThread(thr.Thread):
         work_q.task_done()
     except queue.Empty:
       pass
-    finally:
-      global G_THREADS
-      with lock:
-        del G_THREADS[thr.current_thread().name]
 
 class RefreshThread(thr.Thread):
   def __init__(self, lock):
@@ -1428,17 +1419,16 @@ def main():
   for work in plugs.items():
     work_q.put(work)
 
-  global G_THREADS
+  start_cnt = thr.active_count()
   for num in range(nthreads):
     tname = 'PlugT-{0:02}'.format(num)
     thread = PlugThread(tname, (buf_q, work_q, lock))
     thread.start()
-    G_THREADS[tname] = thread
   if mac_gui:
     rthread = RefreshThread(lock)
     rthread.start()
 
-  while not buf_q.empty() or len(G_THREADS) != 0:
+  while not buf_q.empty() or thr.active_count() != start_cnt:
     try:
       action, name, msg = buf_q.get(True, 0.25)
       buf.write(action, name, msg)