Use a short timeout for closedown

This commit is contained in:
Ben Jackson 2018-12-20 16:03:22 +00:00
commit ea1962e11b
3 changed files with 27 additions and 20 deletions

View file

@ -39,8 +39,13 @@ function! s:_OnClose( channel ) abort
endfunction endfunction
function! s:_Send( msg ) abort function! s:_Send( msg ) abort
if ! exists( 's:job' )
echom "Can't send message: Job was not initialised correctly"
return
endif
if job_status( s:job ) != 'run' if job_status( s:job ) != 'run'
echom "Server isnt running" echom "Can't send message: Job is not running"
return return
endif endif
@ -55,7 +60,7 @@ endfunction
function! vimspector#internal#job#StartDebugSession( config ) abort function! vimspector#internal#job#StartDebugSession( config ) abort
if exists( 's:job' ) if exists( 's:job' )
echom "Job is already running" echom "Not starging: Job is already running"
return v:none return v:none
endif endif
@ -72,8 +77,10 @@ function! vimspector#internal#job#StartDebugSession( config ) abort
\ } \ }
\ ) \ )
echom 'Started job, status is: ' . job_status( s:job )
if job_status( s:job ) != 'run' if job_status( s:job ) != 'run'
echom 'Fail whale. Job is ' . job_status( s:job ) echom 'Unable to start job, status is: ' . job_status( s:job )
return v:none return v:none
endif endif
@ -81,9 +88,10 @@ function! vimspector#internal#job#StartDebugSession( config ) abort
endfunction endfunction
function! vimspector#internal#job#StopDebugSession() abort function! vimspector#internal#job#StopDebugSession() abort
if ! exists( 's:job' ) if !exists( 's:job' )
echom "Not stopping session: Job doesn't exist"
return return
endfunction endif
if job_status( s:job ) == 'run' if job_status( s:job ) == 'run'
call job_stop( s:job, 'term' ) call job_stop( s:job, 'term' )
@ -93,9 +101,7 @@ function! vimspector#internal#job#StopDebugSession() abort
endfunction endfunction
function! vimspector#internal#job#Reset() abort function! vimspector#internal#job#Reset() abort
if exists( 's:job' ) call vimspector#internal#job#StopDebugSession()
call vimspector#internal#job#StopDebugSession()
endif
endfunction endfunction
function! vimspector#internal#job#ForceRead() abort function! vimspector#internal#job#ForceRead() abort

View file

@ -44,7 +44,7 @@ class DebugAdapterConnection( object ):
handler, handler,
msg, msg,
failure_handler=None, failure_handler=None,
timeout = 5000 ): timeout = 15000 ):
this_id = self._next_message_id this_id = self._next_message_id
self._next_message_id += 1 self._next_message_id += 1
@ -66,13 +66,13 @@ class DebugAdapterConnection( object ):
request_id = None request_id = None
for seq, request in self._outstanding_requests.items(): for seq, request in self._outstanding_requests.items():
if request.expiry_id == timer_id: if request.expiry_id == timer_id:
self._AbortRequest( request, 'Timeout' )
request_id = seq request_id = seq
break break
# Avoid modifying _outstanding_requests while looping # Avoid modifying _outstanding_requests while looping
if request_id is not None: if request_id is not None:
del self._outstanding_requests[ request_id ] request = self._outstanding_requests.pop( request_id )
self._AbortRequest( request, 'Timeout' )
def DoResponse( self, request, error, response ): def DoResponse( self, request, error, response ):
this_id = self._next_message_id this_id = self._next_message_id
@ -95,20 +95,21 @@ class DebugAdapterConnection( object ):
def Reset( self ): def Reset( self ):
self._Write = None self._Write = None
self._handler = None self._handler = None
for _, request in self._outstanding_requests.items():
while self._outstanding_requests:
_, request = self._outstanding_requests.popitem()
self._AbortRequest( request, 'Closing down' ) self._AbortRequest( request, 'Closing down' )
self._outstanding_requests.clear()
def _AbortRequest( self, request, reason ): def _AbortRequest( self, request, reason ):
self._logger.debug( 'Aborting request {} because {}'.format( self._logger.debug( '{}: Aborting request {}'.format( reason,
json.dumps( request.msg ), request.msg ) )
reason ) )
_KillTimer( request ) _KillTimer( request )
if request.failure_handler: if request.failure_handler:
request.failure_handler( reason, {} ) request.failure_handler( reason, {} )
else: else:
utils.UserMessage( 'Request aborted: {}'.format( reason ) ) utils.UserMessage( 'Request for {} aborted: {}'.format(
request.msg[ 'command' ],
reason ) )
def OnData( self, data ): def OnData( self, data ):

View file

@ -396,7 +396,7 @@ class DebugSession( object ):
'arguments': { 'arguments': {
'terminateDebugee': True 'terminateDebugee': True
}, },
}, failure_handler = handler ) }, failure_handler = handler, timeout = 5000 )
# This request times out after 5 seconds # This request times out after 5 seconds
while not state[ 'done' ]: while not state[ 'done' ]:
@ -426,7 +426,7 @@ class DebugSession( object ):
'arguments': { 'arguments': {
'terminateDebugee': True 'terminateDebugee': True
}, },
}, failure_handler = handler ) }, failure_handler = handler, timeout = 5000 )
def _SelectProcess( self, adapter_config, launch_config ): def _SelectProcess( self, adapter_config, launch_config ):
atttach_config = adapter_config[ 'attach' ] atttach_config = adapter_config[ 'attach' ]