Mercurial > vim
comparison src/testdir/test_channel.py @ 7916:54602dcac207 v7.4.1254
commit https://github.com/vim/vim/commit/3b05b135e3ee4cfd59983fd63461e8f7642c1713
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Feb 3 23:25:07 2016 +0100
patch 7.4.1254
Problem: Opening a second channel causes a crash. (Ken Takata)
Solution: Don't re-allocate the array with channels.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 03 Feb 2016 23:30:04 +0100 |
parents | 35973ce58c84 |
children | ce5a7a613867 |
comparison
equal
deleted
inserted
replaced
7915:72085904c404 | 7916:54602dcac207 |
---|---|
22 import socketserver | 22 import socketserver |
23 except ImportError: | 23 except ImportError: |
24 # Python 2 | 24 # Python 2 |
25 import SocketServer as socketserver | 25 import SocketServer as socketserver |
26 | 26 |
27 thesocket = None | |
28 | |
29 class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler): | 27 class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler): |
30 | 28 |
31 def handle(self): | 29 def handle(self): |
32 print("=== socket opened ===") | 30 print("=== socket opened ===") |
33 global thesocket | |
34 thesocket = self.request | |
35 while True: | 31 while True: |
36 try: | 32 try: |
37 received = self.request.recv(4096).decode('utf-8') | 33 received = self.request.recv(4096).decode('utf-8') |
38 except socket.error: | 34 except socket.error: |
39 print("=== socket error ===") | 35 print("=== socket error ===") |
75 # Send two ex commands at the same time, before replying to | 71 # Send two ex commands at the same time, before replying to |
76 # the request. | 72 # the request. |
77 cmd = '["ex","call append(\\"$\\",\\"added1\\")"]' | 73 cmd = '["ex","call append(\\"$\\",\\"added1\\")"]' |
78 cmd += '["ex","call append(\\"$\\",\\"added2\\")"]' | 74 cmd += '["ex","call append(\\"$\\",\\"added2\\")"]' |
79 print("sending: {}".format(cmd)) | 75 print("sending: {}".format(cmd)) |
80 thesocket.sendall(cmd.encode('utf-8')) | 76 self.request.sendall(cmd.encode('utf-8')) |
81 response = "ok" | 77 response = "ok" |
82 elif decoded[1] == 'eval-works': | 78 elif decoded[1] == 'eval-works': |
83 # Send an eval request. We ignore the response. | 79 # Send an eval request. We ignore the response. |
84 cmd = '["eval","\\"foo\\" . 123", -1]' | 80 cmd = '["eval","\\"foo\\" . 123", -1]' |
85 print("sending: {}".format(cmd)) | 81 print("sending: {}".format(cmd)) |
86 thesocket.sendall(cmd.encode('utf-8')) | 82 self.request.sendall(cmd.encode('utf-8')) |
87 response = "ok" | 83 response = "ok" |
88 elif decoded[1] == 'eval-fails': | 84 elif decoded[1] == 'eval-fails': |
89 # Send an eval request that will fail. | 85 # Send an eval request that will fail. |
90 cmd = '["eval","xxx", -2]' | 86 cmd = '["eval","xxx", -2]' |
91 print("sending: {}".format(cmd)) | 87 print("sending: {}".format(cmd)) |
92 thesocket.sendall(cmd.encode('utf-8')) | 88 self.request.sendall(cmd.encode('utf-8')) |
93 response = "ok" | 89 response = "ok" |
94 elif decoded[1] == 'eval-result': | 90 elif decoded[1] == 'eval-result': |
95 # Send back the last received eval result. | 91 # Send back the last received eval result. |
96 response = last_eval | 92 response = last_eval |
97 elif decoded[1] == '!quit!': | 93 elif decoded[1] == '!quit!': |
103 else: | 99 else: |
104 response = "what?" | 100 response = "what?" |
105 | 101 |
106 encoded = json.dumps([decoded[0], response]) | 102 encoded = json.dumps([decoded[0], response]) |
107 print("sending: {}".format(encoded)) | 103 print("sending: {}".format(encoded)) |
108 thesocket.sendall(encoded.encode('utf-8')) | 104 self.request.sendall(encoded.encode('utf-8')) |
109 | 105 |
110 # Negative numbers are used for "eval" responses. | 106 # Negative numbers are used for "eval" responses. |
111 elif decoded[0] < 0: | 107 elif decoded[0] < 0: |
112 last_eval = decoded | 108 last_eval = decoded |
113 | |
114 thesocket = None | |
115 | 109 |
116 class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer): | 110 class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer): |
117 pass | 111 pass |
118 | 112 |
119 if __name__ == "__main__": | 113 if __name__ == "__main__": |