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__":