Visual Studio blocked if the TFS is busy

Our TFS was busy running at 100% processor usage because of the problem described in http://forums.microsoft.com/MSDN/ShowPost.aspx PostID=177068&SiteID=1. < xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

If you start the VS client, during this time, it gets unresponsive. If it were waiting for a little while (like 10-30 seconds), the way it would do if there were connectivity problems and came up with a error message, it would be OK. The problem was that even after 10 minutes VS was still blocked.

The only workaround we have came up with, was to pull out the network cable from the client computer in which case VS stated that the "A connection that was expected to be kept alive was closed by the server.". Only then continued VS to load the last used solution and work just fine, but obviously without TFS.

I was under impression, since the connection between VS and TFS is web services based, that there are no continuously running connections between the two and if the TFS is intermittently unavailable that the VS wouldn't bother. Well it isn't so, at least during the startup of the VS.

 




Answer this question

Visual Studio blocked if the TFS is busy

  • tom-

    Some calls are obviously asynchronous (sending a query to the wit db for instance) some are not (getting the list of available TFS projects on a newly connected server), especially during login.< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    Usually that is just what you want, since those calls that are not asynchronous usually have some kind of time out period. After the time out period elapses, an error message usually appears and that is OK.

    The problem with the described case is that even after 10 or so minutes no error message appears and only after the network cable is pulled out an error message is shown.



  • Site Defense

    I see from your original post that your DT was pegged by the branching bug.  We plan on providing better cancellation support in v2 so that you'd likely be able to cancel a request that didn't return.

    Buck



  • singlark

    Hello Ognjen,

    Would it be possible to answer a few questions

    1. Was TE set to auto-load (Visible when last VS instance was properly closed)
    2. What was in TE at that time Did it say "Connecting..." or something else
    3. Would it be possible for you to attach a debugger, break in and see where it was stuck

    Thanks,

    Ravi


  • sirbill

    I have experienced this slowness as well; aren't the calls from team explorer asynchronous

  • richardghome

    Hello Buck,< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    it would be nice to be able to cancel a very long running request. Even in V2. :-)

    However, it is still not too nice that VS hangs up waiting for a server that is in limbo...There could be some kind of watchdog to handle such a situation. 

    Anyway, the problem appears when you start VS and the server is busy even if VS doesn't load a solution right away, as long as the team explorer is open.

    My questions:

    -Are we the only one experiencing the problem or is it a known issue

    -Is there a workaround in the current version (Beta 3 Refresh) or will there be in any newer version (other than the one we already found out ourselves - to plug the network cable in and out again) We have a server in daily usage in the production environment and this issue is somewhat irritating.

    Thanks a lot.



  • Vertexwahn

    Sorry for the delay, I was away on holidays... :-)< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    1. Was TE set to auto-load (Visible when last VS instance was properly closed)

    Yes. When TE is set to auto-load, VS freezes during startup. Freezing occurs sometimes during splash-screen and sometimes right after the VS start page is displayed.

    VS also freezes if the VSTS suddenly gets overloaded for some reason and I’m using source control or playing with work items.

     

    1. What was in TE at that time Did it say "Connecting..." or something else

    If the start page is shown, TE displays "Connecting..."

     

    1. Would it be possible for you to attach a debugger, break in and see where it was stuck

    I attached a debugger, and here are call stacks for both cases.

     

    i)                     splash screen freeze

    mscorlib.dll!System.Threading.WaitHandle.WaitAny(System.Threading.WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext) + 0x63 bytes    

          System.dll!System.Net.TimerThread.ThreadProc() + 0x2b8 bytes      

          mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x3b bytes     

          mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x81 bytes       

          mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x40 bytes      

     

    ii)                   start-page freeze

    System.dll!System.Net.Sockets.Socket.Receive(byte[] buffer = {Dimensions:[4096]}, int offset = 0, int size, System.Net.Sockets.SocketFlags socketFlags = None, out System.Net.Sockets.SocketError errorCode = Success) + 0x136 bytes         

          System.dll!System.Net.Sockets.Socket.Receive(byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags) + 0x1d bytes         

          System.dll!System.Net.Sockets.NetworkStream.Read(byte[] buffer, int offset, int size) + 0x78 bytes         

          System.dll!System.Net.PooledStream.Read(byte[] buffer, int offset, int size) + 0x16 bytes     

          System.dll!System.Net.Connection.SyncRead(System.Net.HttpWebRequest request = {System.Net.HttpWebRequest}, bool userRetrievedStream = true, bool probeRead = false) + 0x12e bytes         

           System.dll!System.Net.ConnectStream.ProcessWriteCallDone(System.Net.ConnectionReturnResult returnResult) + 0x77 bytes       

          System.dll!System.Net.HttpWebRequest.WriteCallDone(System.Net.ConnectStream stream, System.Net.ConnectionReturnResult returnResult) + 0xb2 bytes  

          System.dll!System.Net.ConnectStream.CallDone(System.Net.ConnectionReturnResult returnResult) + 0x5a bytes

          System.dll!System.Net.ConnectStream.ResubmitWrite(System.Net.ConnectStream oldStream, bool suppressWrite) + 0x3c8 bytes

          System.dll!System.Net.HttpWebRequest.EndWriteHeaders_Part2() + 0x8d bytes       

          System.dll!System.Net.HttpWebRequest.EndWriteHeaders(bool async) + 0x159 bytes           

           System.dll!System.Net.HttpWebRequest.WriteHeadersCallback(System.Net.WebExceptionStatus errorStatus, System.Net.ConnectStream stream = {System.Net.ConnectStream}, bool async) + 0xe bytes         

          System.dll!System.Net.ConnectStream.WriteHeaders(bool async) + 0x2fa bytes       

          System.dll!System.Net.HttpWebRequest.EndSubmitRequest() + 0xa2 bytes   

          System.dll!System.Net.HttpWebRequest.CheckDeferredCallDone(System.Net.ConnectStream stream) + 0x47 bytes         

          System.dll!System.Net.HttpWebRequest.GetResponse() + 0x286 bytes           

           Microsoft.TeamFoundation.VersionControl.Client.dll!Microsoft.TeamFoundation.VersionControl.Client.AsyncWebRequest.ExecRequest(object obj) + 0x54 bytes  

          mscorlib.dll!System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(object state) + 0x2f bytes 

          mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x81 bytes       

          mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(object state) + 0x6c bytes 

     

    Thanks!

    Ognjen

     



  • Visual Studio blocked if the TFS is busy