Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-9104

Visual studio builds started by Jenkins fail with "Fatal error C1090" because mspdbsrv.exe gets killed

    Details

    • Type: Bug
    • Status: Reopened
    • Priority: Major
    • Resolution: Unresolved
    • Component/s: core
    • Labels:
      None
    • Environment:
      Windows XP, Windows 7 using MSBuild or devenv.exe to build MS Visual Studio Projects

      Description

      I run into errors when using a customized build system which uses Visual Studio's devenv.exe under the hood to compile VisualStudio 2005 projects (with VC++ compiler). When starting two parallel builds with Jenkins (on different code base) the second job will always fail with "Fatal error C1090: PDB API call failed, error code '23' : '(" in exactly the same second the first job finishes processing. Running both jobs outside Jenkins does not produce the error.
      This has also been reported for builds executed by MSBuild on the Jenkins user mailing list [1].

      I analysed this issue thoroughly and can track the problem down to the usage of mspdbsrv.exe. This program is automatically spawned when building a VisualStudio project. All Visual Studio instances normally share one common pdb-server which shutdown itself after a idle period (standard is 10 minutes). "It ensures access to .pdb files is properly serialized in parallel builds when multiple instances of the compiler try to access the same .pdb file" [2].
      I assume that Jenkins does a clean up of its build environment when a automatically started job finishes (like as described at http://wiki.jenkins-ci.org/display/JENKINS/Aborting+a+build). I checked mspbsrv.exe with ProcessExplorer and the process indeed has a variable JENKINS_COOKIE/HUDSON_COOKIE set in its environment if started through Jenkins. Killing mspdbsrv.exe while projects are still connected will break compilation.

      Jenkins mustn't kill mspdbsrv.exe to be able to build more than one Visual Studio project at the same time.


      [1] http://jenkins.361315.n4.nabble.com/MSBuild-fatal-errors-when-build-triggered-by-timer-td385181.html
      [2] http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/b1d1bceb-06b6-47ef-a0ea-23ea752e0c4f/

        Issue Links

          Activity

          Hide
          akb Antony Bartlett added a comment -

          Is there a plan for Visual Studio builds not started by the msbuild-plugin, please?

          I'm asking because our job configurations use a "Execute Windows batch command" build step rather than "Build a Visual Studio project or solution using MSBuild" build step (and our batch process is non-trivial).

          Show
          akb Antony Bartlett added a comment - Is there a plan for Visual Studio builds not started by the msbuild-plugin, please? I'm asking because our job configurations use a "Execute Windows batch command" build step rather than "Build a Visual Studio project or solution using MSBuild" build step (and our batch process is non-trivial).
          Hide
          danielbeck Daniel Beck added a comment -

          Antony Bartlett The proposed MSBuild Plugin change only requires the plugin to be installed to be effective (assuming mspdbsrv.exe is what you don't want killed).

          Show
          danielbeck Daniel Beck added a comment - Antony Bartlett The proposed MSBuild Plugin change only requires the plugin to be installed to be effective (assuming mspdbsrv.exe is what you don't want killed).
          Hide
          akb Antony Bartlett added a comment -

          That's great - thank you very much for clarifying this, and for your efforts to fix the wider issue - I'm looking forward to having more projects and configurations built automatically in a timely fashion through judicious use of parallelization

          Show
          akb Antony Bartlett added a comment - That's great - thank you very much for clarifying this, and for your efforts to fix the wider issue - I'm looking forward to having more projects and configurations built automatically in a timely fashion through judicious use of parallelization
          Hide
          danielbeck Daniel Beck added a comment -

          Antony Bartlett Forwarding the praise to my (first)namesake Daniel Weber who did all the work

          Show
          danielbeck Daniel Beck added a comment - Antony Bartlett Forwarding the praise to my (first)namesake Daniel Weber who did all the work
          Hide
          danielweber Daniel Weber added a comment -

          Daniel Beck: Well, the core stuff is done. But from a user's perspective the issue still exists.

          How can I get someone to merge the pending PR and create a release of the msbuild plugin?

          Show
          danielweber Daniel Weber added a comment - Daniel Beck : Well, the core stuff is done. But from a user's perspective the issue still exists. How can I get someone to merge the pending PR and create a release of the msbuild plugin?

            People

            • Assignee:
              danielweber Daniel Weber
              Reporter:
              gordin Christoph VogtlÃĪnder
            • Votes:
              51 Vote for this issue
              Watchers:
              65 Start watching this issue

              Dates

              • Created:
                Updated: