     @procs[key] = @procs[key].filter (x) -> x != obj
 
   toCache: (path, args, proc) ->
+    proc.cached = true
     @cache(path, args).push proc
 
   fromCache: (path, args) ->
     ps = @cache path, args
     p = ps.shift()
-    if p == @booting then delete @booting
-    @start path, args
-    p?.proc
+    return unless p?
+    p.cached = false
+    p.init.then =>
+      if p == @booting then delete @booting
+      @start path, args
+      p.proc
 
   start: (path, args) ->
     if @booting

{isEqual} = require 'underscore-plus'
{hook} = require '../../misc'
basic = require './basic'

module.exports =


      @booting = basic.get(path, args).then (proc) =>
        obj = {path, args, proc: proc}
        @monitor obj
        @warmup obj
        @toCache path, args, obj
        proc.socket
          .then =>
