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
    • Similar Issues:

      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/

        Attachments

          Issue Links

            Activity

            Hide
            danielbeck Daniel Beck added a comment -

            Then install it. MSBuild will veto all mspdbsrv killing.

            Show
            danielbeck Daniel Beck added a comment - Then install it. MSBuild will veto all mspdbsrv killing.
            Hide
            mwinter69 Markus Winter added a comment - - edited

            set the environment variable
            _MSPDBSRV_ENDPOINT_=$JENKINS_COOKIE
            (The variable starts and ends with a single '_')
            This will lead to separate instance of mspdbsrv being started.

            Show
            mwinter69 Markus Winter added a comment - - edited set the environment variable _ MSPDBSRV_ENDPOINT _=$JENKINS_COOKIE (The variable starts and ends with a single '_') This will lead to separate instance of mspdbsrv being started.
            Hide
            grillba Mark Grills added a comment - - edited

            Markus Winter, thanks for the pointer.

            We couldn't get it working with $JENKINS_COOKIE but managed to correct it by adding the following property via EnvInject prior to kicking off the build

            _MSPDBSRV_ENDPOINT_=$BUILD_TAG

            This resulted in a separate process being initiated for each build and no conflicts/error.

            Edit: Correction due to formatting. Refer below

            Show
            grillba Mark Grills added a comment - - edited Markus Winter , thanks for the pointer. We couldn't get it working with $JENKINS_COOKIE but managed to correct it by adding the following property via EnvInject prior to kicking off the build _MSPDBSRV_ENDPOINT_=$BUILD_TAG This resulted in a separate process being initiated for each build and no conflicts/error. Edit: Correction due to formatting. Refer below
            Hide
            hidminds Daniel Fischer added a comment - - edited

            It is

            _MSPDBSRV_ENDPOINT_

            (with underlines) not MSPDBSRV_ENDPOINT.

            Just realized it myself that it's a formatting issue. If you enclose the word in underlines it will get italicised and the underlines disappear.

            Show
            hidminds Daniel Fischer added a comment - - edited It is _MSPDBSRV_ENDPOINT_ (with underlines) not MSPDBSRV_ENDPOINT. Just realized it myself that it's a formatting issue. If you enclose the word in underlines it will get italicised and the underlines disappear.
            Hide
            grillba Mark Grills added a comment -

            Apologies, yes an underscore at each end.

            Show
            grillba Mark Grills added a comment - Apologies, yes an underscore at each end.

              People

              • Assignee:
                danielweber Daniel Weber
                Reporter:
                gordin Christoph Vogtländer
              • Votes:
                63 Vote for this issue
                Watchers:
                82 Start watching this issue

                Dates

                • Created:
                  Updated: