diff options
author | Maximilian Hils <git@maximilianhils.com> | 2016-04-02 21:03:36 +0200 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2016-04-02 21:03:36 +0200 |
commit | 3a1486183cbe743427179096dd92181865aad638 (patch) | |
tree | 5f9cbafaecb988e17a5aa1927fa9b69f717aa6a4 /mitmproxy/script | |
parent | 4bdf7e035ea83a8c59a7d10087b3a71ea8ff29bc (diff) | |
download | mitmproxy-3a1486183cbe743427179096dd92181865aad638.tar.gz mitmproxy-3a1486183cbe743427179096dd92181865aad638.tar.bz2 mitmproxy-3a1486183cbe743427179096dd92181865aad638.zip |
fix #1061
Diffstat (limited to 'mitmproxy/script')
-rw-r--r-- | mitmproxy/script/concurrent.py | 27 |
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) |