From 76d1e667902c34fbddc5ec267c269a799a0e0524 Mon Sep 17 00:00:00 2001
From: David Wilson <dw@botanicus.net>
Date: Thu, 21 Sep 2017 03:26:14 +0530
Subject: [PATCH] fakessh: use decorators rather than
 call_with_deadline(with_context=..)

---
 mitogen/fakessh.py | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/mitogen/fakessh.py b/mitogen/fakessh.py
index ab839a57..7d0a6419 100644
--- a/mitogen/fakessh.py
+++ b/mitogen/fakessh.py
@@ -215,21 +215,22 @@ class Process(object):
             pass
 
 
-def _start_slave(mitogen_, src_id, args):
+@mitogen.core.takes_router
+def _start_slave(src_id, args, router):
     """
     This runs in the target context, it is invoked by _fakessh_main running in
     the fakessh context immediately after startup. It starts the slave process
     (the the point where it has a stdin_handle to target but not stdout_chan to
     write to), and waits for main to.
     """
-    LOG.debug('_start_slave(%r, %r)', mitogen_, args)
+    LOG.debug('_start_slave(%r, %r)', router, args)
 
     proc = subprocess.Popen(args,
         stdin=subprocess.PIPE,
         stdout=subprocess.PIPE,
     )
 
-    process = Process(mitogen_.router,
+    process = Process(router,
         proc.stdin.fileno(),
         proc.stdout.fileno(),
         proc,
@@ -276,7 +277,8 @@ def parse_args():
     return hostname, allopts, args
 
 
-def _fakessh_main(mitogen_, dest_context_id):
+@mitogen.core.takes_econtext
+def _fakessh_main(dest_context_id, econtext):
     hostname, opts, args = parse_args()
     if not hostname:
         die('Missing hostname')
@@ -295,14 +297,15 @@ def _fakessh_main(mitogen_, dest_context_id):
     if subsystem:
         die('-s <subsystem> is not yet supported')
 
-    dest = mitogen.master.Context(mitogen_.router, dest_context_id)
-    control_handle, stdin_handle = dest.call_with_deadline(None, True,
-        _start_slave, mitogen.context_id, args)
+    dest = mitogen.master.Context(econtext.router, dest_context_id)
+
+    control_handle, stdin_handle = dest.call(_start_slave,
+        mitogen.context_id, args)
 
     LOG.debug('_fakessh_main: received control_handle=%r, stdin_handle=%r',
               control_handle, stdin_handle)
 
-    process = Process(mitogen_.router, 1, 0)
+    process = Process(econtext.router, 1, 0)
     process.start_master(
         stdin=mitogen.core.Sender(dest, stdin_handle),
         control=mitogen.core.Sender(dest, control_handle),
@@ -352,7 +355,7 @@ def run(dest, router, args, deadline=None, econtext=None):
     router.register(fakessh, stream)
 
     # Held in socket buffer until process is booted.
-    fakessh.call_async(True, _fakessh_main, dest.context_id)
+    fakessh.call_async(_fakessh_main, dest.context_id)
 
     tmp_path = tempfile.mkdtemp(prefix='mitogen_fakessh')
     try: