aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/script
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2016-04-02 21:03:36 +0200
committerMaximilian Hils <git@maximilianhils.com>2016-04-02 21:03:36 +0200
commit3a1486183cbe743427179096dd92181865aad638 (patch)
tree5f9cbafaecb988e17a5aa1927fa9b69f717aa6a4 /mitmproxy/script
parent4bdf7e035ea83a8c59a7d10087b3a71ea8ff29bc (diff)
downloadmitmproxy-3a1486183cbe743427179096dd92181865aad638.tar.gz
mitmproxy-3a1486183cbe743427179096dd92181865aad638.tar.bz2
mitmproxy-3a1486183cbe743427179096dd92181865aad638.zip
fix #1061
Diffstat (limited to 'mitmproxy/script')
-rw-r--r--mitmproxy/script/concurrent.py27
1 files changed, 14 insertions, 13 deletions
diff --git a/mitmproxy/script/concurrent.py b/mitmproxy/script/concurrent.py
index 57ee37de..2f25e78c 100644
--- a/mitmproxy/script/concurrent.py
+++ b/mitmproxy/script/concurrent.py
@@ -8,22 +8,23 @@ import threading
class ReplyProxy(object):
- def __init__(self, original_reply, script_thread):
- self.original_reply = original_reply
+ def __init__(self, reply_func, script_thread):
+ self.reply_func = reply_func
self.script_thread = script_thread
- self._ignore_call = True
- self.lock = threading.Lock()
+ self.master_reply = None
- def __call__(self, *args, **kwargs):
- with self.lock:
- if self._ignore_call:
- self.script_thread.start()
- self._ignore_call = False
- return
- self.original_reply(*args, **kwargs)
+ def __call__(self, *args):
+ if self.master_reply is None:
+ self.master_reply = args
+ self.script_thread.start()
+ return
+ self.reply_func(*args)
+
+ def done(self):
+ self.reply_func(*self.master_reply)
def __getattr__(self, k):
- return getattr(self.original_reply, k)
+ return getattr(self.reply_func, k)
def _handle_concurrent_reply(fn, o, *args, **kwargs):
@@ -34,7 +35,7 @@ def _handle_concurrent_reply(fn, o, *args, **kwargs):
def run():
fn(*args, **kwargs)
# If the script did not call .reply(), we have to do it now.
- reply_proxy()
+ reply_proxy.done()
script_thread = ScriptThread(target=run)