summaryrefslogtreecommitdiff
path: root/python/helpers/pydev/pycompletionserver.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/helpers/pydev/pycompletionserver.py')
-rw-r--r--python/helpers/pydev/pycompletionserver.py39
1 files changed, 17 insertions, 22 deletions
diff --git a/python/helpers/pydev/pycompletionserver.py b/python/helpers/pydev/pycompletionserver.py
index 0b11cb6ff4f7..154ad630aca3 100644
--- a/python/helpers/pydev/pycompletionserver.py
+++ b/python/helpers/pydev/pycompletionserver.py
@@ -17,23 +17,17 @@ except NameError:
setattr(__builtin__, 'True', 1) # Python 3.0 does not accept __builtin__.True = 1 in its syntax
setattr(__builtin__, 'False', 0)
-import pydevd_constants
+from pydevd_constants import IS_JYTHON
-try:
- from java.lang import Thread
- IS_JYTHON = True
+if IS_JYTHON:
+ import java.lang
SERVER_NAME = 'jycompletionserver'
import _pydev_jy_imports_tipper # as _pydev_imports_tipper #changed to be backward compatible with 1.5
_pydev_imports_tipper = _pydev_jy_imports_tipper
-except ImportError:
+else:
# it is python
- IS_JYTHON = False
SERVER_NAME = 'pycompletionserver'
- if pydevd_constants.USE_LIB_COPY:
- from _pydev_threading import Thread
- else:
- from threading import Thread
import _pydev_imports_tipper
@@ -185,14 +179,16 @@ class Processor:
return '%s(%s)%s' % (MSG_COMPLETIONS, ''.join(compMsg), MSG_END)
+class Exit(Exception):
+ pass
-class T(Thread):
+class CompletionServer:
def __init__(self, port):
- Thread.__init__(self)
self.ended = False
self.port = port
self.socket = None # socket to send messages.
+ self.exit_process_on_kill = True
self.processor = Processor()
@@ -266,7 +262,7 @@ class T(Thread):
while data.find(MSG_END) == -1:
received = self.socket.recv(BUFFER_SIZE)
if len(received) == 0:
- sys.exit(0) # ok, connection ended
+ raise Exit() # ok, connection ended
if IS_PYTHON3K:
data = data + received.decode('utf-8')
else:
@@ -278,7 +274,7 @@ class T(Thread):
dbg(SERVER_NAME + ' kill message received', INFO1)
# break if we received kill message.
self.ended = True
- sys.exit(0)
+ raise Exit()
dbg(SERVER_NAME + ' starting keep alive thread', INFO2)
@@ -359,7 +355,7 @@ class T(Thread):
else:
self.send(MSG_INVALID_REQUEST)
- except SystemExit:
+ except Exit:
self.send(self.getCompletionsMessage(None, [('Exit:', 'SystemExit', '')]))
raise
@@ -378,11 +374,12 @@ class T(Thread):
self.socket.close()
self.ended = True
- sys.exit(0) # connection broken
+ raise Exit() # connection broken
- except SystemExit:
- raise
+ except Exit:
+ if self.exit_process_on_kill:
+ sys.exit(0)
# No need to log SystemExit error
except:
s = StringIO.StringIO()
@@ -399,8 +396,6 @@ if __name__ == '__main__':
port = int(sys.argv[1]) # this is from where we want to receive messages.
- t = T(port)
+ t = CompletionServer(port)
dbg(SERVER_NAME + ' will start', INFO1)
- t.start()
- time.sleep(5)
- t.join()
+ t.run()