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

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Major
    • Resolution: Fixed
    • 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
            davida2009 David Aldrich added a comment -

            Please can anyone advise me how to set _MSPDBSRV_ENDPOINT_ with value BUILD_TAG in a pipeline declarative script?

            I don’t really understand the difference between defining and injecting an environment variable. I could do:

            stage('build_VisualStudio') {
                    environment { _MSPDBSRV_ENDPOINT_=$BUILD_TAG }
            etc.
            

            Would that be sufficient or must environment variable injection be done in a different way?

            Show
            davida2009 David Aldrich added a comment - Please can anyone advise me how to set _MSPDBSRV_ENDPOINT_ with value BUILD_TAG in a pipeline declarative script? I don’t really understand the difference between defining and injecting an environment variable. I could do: stage( 'build_VisualStudio' ) { environment { _MSPDBSRV_ENDPOINT_=$BUILD_TAG } etc. Would that be sufficient or must environment variable injection be done in a different way?
            Hide
            scm_issue_link SCM/JIRA link daemon added a comment -

            Code changed in jenkins
            User: Daniel Beck
            Path:
            content/_data/changelogs/weekly.yml
            http://jenkins-ci.org/commit/jenkins.io/0391fcb9b4c957e9e41fde03409de330a3de571d
            Log:
            Remove JENKINS-9104 fix from release to unblock it

            Show
            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Daniel Beck Path: content/_data/changelogs/weekly.yml http://jenkins-ci.org/commit/jenkins.io/0391fcb9b4c957e9e41fde03409de330a3de571d Log: Remove JENKINS-9104 fix from release to unblock it
            Hide
            scm_issue_link SCM/JIRA link daemon added a comment -

            Code changed in jenkins
            User: Daniel Beck
            Path:
            content/_data/changelogs/weekly.yml
            http://jenkins-ci.org/commit/jenkins.io/62409d42a5769cac66337cbd4b5df5754f0e2384
            Log:
            Merge pull request #1522 from daniel-beck/changelog-2.119-amended

            Remove JENKINS-9104 fix from release to unblock it

            Compare: https://github.com/jenkins-infra/jenkins.io/compare/58f029c79331...62409d42a576

            Show
            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Daniel Beck Path: content/_data/changelogs/weekly.yml http://jenkins-ci.org/commit/jenkins.io/62409d42a5769cac66337cbd4b5df5754f0e2384 Log: Merge pull request #1522 from daniel-beck/changelog-2.119-amended Remove JENKINS-9104 fix from release to unblock it Compare: https://github.com/jenkins-infra/jenkins.io/compare/58f029c79331...62409d42a576
            Hide
            scm_issue_link SCM/JIRA link daemon added a comment -

            Code changed in jenkins
            User: Jesse Glick
            Path:
            core/src/main/java/hudson/util/ProcessTree.java
            test/src/test/java/hudson/util/ProcessTreeKillerTest.java
            http://jenkins-ci.org/commit/jenkins/3465da4764c322baf4fb5b90651ef6b9bcd409fb
            Log:
            Merge pull request #3419 from dwnusbaum/JENKINS-9104-test-fix

            Fix test failure by cleaning up static state after tests

            Compare: https://github.com/jenkinsci/jenkins/compare/ddbc4bbce7d3...3465da4764c3
            *NOTE:* This service been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/

            Functionality will be removed from GitHub.com on January 31st, 2019.

            Show
            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: core/src/main/java/hudson/util/ProcessTree.java test/src/test/java/hudson/util/ProcessTreeKillerTest.java http://jenkins-ci.org/commit/jenkins/3465da4764c322baf4fb5b90651ef6b9bcd409fb Log: Merge pull request #3419 from dwnusbaum/ JENKINS-9104 -test-fix Fix test failure by cleaning up static state after tests Compare: https://github.com/jenkinsci/jenkins/compare/ddbc4bbce7d3...3465da4764c3 * NOTE: * This service been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/ Functionality will be removed from GitHub.com on January 31st, 2019.
            Hide
            danielbeck Daniel Beck added a comment -

            Jenkins 2.120 contains a fix for the previous problem of the ProcessKillingVeto extension point not working on agents.

            Show
            danielbeck Daniel Beck added a comment - Jenkins 2.120 contains a fix for the previous problem of the ProcessKillingVeto extension point not working on agents.

              People

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

                Dates

                • Created:
                  Updated:
                  Resolved: