Itiviti / gradle-msbuild-plugin

Gradle plugin for msbuild execution, supports C# project files for now
Apache License 2.0
101 stars 58 forks source link

exec hangs for hours after msbuild completes #72

Open jr4 opened 7 years ago

jr4 commented 7 years ago

After the msbuild process ends (verified in task manager), the gradle process continues to hang. Windows 7, VS 2013 or 2015, Java 8, Gradle 3.0 or 3.2. No issues on Linux.

This is effectively a blocker for any nontrivial build.

Attaching jstack output.

Looks similar to a complaint about gradle here: https://discuss.gradle.org/t/weirdness-in-gradle-exec-on-windows/13660/6

gradledaemonstack.txt

gluck commented 7 years ago

I verified and the build of il-repack doesn't exhibit this behavior (feel free to confirm). It's using gradle 2.9, JDK 8 and VS 2015.

If it's indeed related to msbuild passing its FD out to child processes, maybe it has something to do with your build env ?

jr4 commented 7 years ago

Thanks for testing that, you're right, gradle 2.x seems to be ok. I just tested my build using gradle 2.14.1 and had no problem. But gradle 3.0 and 3.2 both hang consistently.

I see that the plugin uses project.exec for the build but not for the ProjectFileParser. I changed the plugin code to avoid project.exec and use similar code in both cases. It resolves this issue, so I'm confident there's something weird going on with gradle 3's exec. I don't know for a fact that it's related to FDs and child processes, but it's possible and does have the same symptoms. What we do know is gradle3+the plugin will consistently hang for certain msbuild projects, on multiple versions of VS.

So although the problem is not in the plugin, would you be willing to include this code so that builds don't hang on gradle 3? https://github.com/jr4/gradle-msbuild-plugin/commit/6efbe1d2aa07ccae1065e8c7fa53ebe103661a5c

gluck commented 7 years ago

I tested 3.1 (with daemon) on il-repack, no issue, also tested 3.2 with --no-daemon, same. Can you confirm ?

Using 3.2 with daemon is messy, lots of popups from each task exec, I suspect that's related to the recent changes to DaemonMain.

gluck commented 7 years ago

Note that even though the behavior with Gradle 3.2 + daemon is a mess, I do not reproduce your issue, as the stackdump of the daemon after the build is clean of any msbuild ref.